我需要一个字符编码技巧来去除希伯来语重音标记。
之前的样品
???????????? ??????? ????????? ??????????????? ???????????????
样品后
?????????????? ?? ????? ??????
我们真的需要 C# 中的事务处理以及双方的数据库存储过程吗?
C#:
Using(transaction with transaction scope)
{
Execute stored proc;
Transaction. Complete;
}
Run Code Online (Sandbox Code Playgroud)
SQL存储过程:
Create process
As
Begin try
Begin transaction
Commit
End try
Begin catch
Rollback
End catch
Run Code Online (Sandbox Code Playgroud) 我需要创建一些涉及层次结构的测试数据。我可以让它变得简单并做几个CROSS JOINs,但这会给我一个完全统一/没有任何变化的结构。这不仅看起来很乏味,而且测试数据缺乏变化有时会掩盖原本会发现的问题。所以,我想生成一个遵循以下规则的非统一层次结构:
WHILE循环可以很容易地做到这一点,但首选是找到一种基于集合的方法。一般而言,生成测试数据没有生产代码对效率的要求,但尝试基于集合的方法可能会更具教育意义,并有助于在未来找到基于集合的方法来解决问题。因此WHILE,不排除循环,但只有在不可能使用基于集合的方法时才能使用循环。我发现以下查询可以按数据库检测 CPU 使用率,但它们显示不同的结果:
WITH DB_CPU_Stats
AS
(
SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName],
SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (
SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid') AS F_DB
GROUP BY DatabaseID
)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
DatabaseName,
[CPU_Time_Ms],
CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
--WHERE DatabaseID > 4 -- system databases
--AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SQLCMD 实用程序通过 PowerShell 访问我计算机上的“localdb\MSSQLLocalDB”服务器。我使用的是 PowerShell v5、.NET v5.0,服务器名称是(localdb)\MSSQLLocalDB我在 Microsoft SQL Server Management Studio 2014 中连接到它时的名称。
PS C:\> sqlcmd -S localdb\MSSQLLocalDB并PS C:\> sqlcmd -S .\localdb\MSSQLLocalDB导致此错误:
Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:SQL Server 网络接口:定位服务器/实例时出错 [xFFFFFFFF]。
我在 Management Studio 中查询服务器名称SELECT @@ServerName并-S在上面的命令之后使用它并得到相同的错误。
PS C:\> sqlcmd -S localdb 给出这个错误:
Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 11:命名管道提供程序:无法打开与 SQL Server 的连接 [53]
其他注意事项:我能够连接到服务器并使用此连接字符串在 C# 控制台应用程序中使用名为testdb01的数据库System.Data.SqlClient:
"Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"
Run Code Online (Sandbox Code Playgroud) 我需要在 SQL Server CLR 的触发器 c# 代码中使用第三方 DLL
但是当我尝试添加引用时,它只显示来自 SQL Server 的一些 DLL。
如何将我的第三方 dll添加到 SQL Server?
我试图从存储和性能角度了解决定 varchar 列应该有多大的最佳方法。
性能
从我的研究来看,似乎varchar(max) 只应在您确实需要时使用;也就是说,如果该列必须容纳超过 8000 个字符,一个原因是缺乏索引(尽管我对一般的 varchar 字段的索引有点怀疑。不过,我对 DB 原则还很陌生,所以也许这是没有根据的) 和压缩(更多的是存储问题)。事实上,一般来说,人们似乎只推荐使用你需要的东西,当做 varchar(n)....oversizing 是不好的,因为查询必须考虑到最大可能的大小。但也有人表示,引擎将使用指示大小的一半作为数据平均实际大小的估计值。这意味着人们应该根据数据确定平均大小是多少,将其翻倍,并将其用作 n。对于具有非常低但非零可变性的数据,这意味着比最大尺寸大 2 倍,这看起来很多,但也许不是?见解将不胜感激。
存储
在阅读了行内与行外存储的工作原理后,并记住实际存储仅限于实际数据,在我看来,n 的选择实际上对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用 varchar(max) 也不会对存储产生任何影响。相反,如果可能,目标可能是将每个数据行的实际大小限制为 ~8000 字节。这是对事物的准确阅读吗?
上下文
我们的一些客户数据会稍微波动,因此我们通常将这些列的列设置得比它们需要的宽度稍宽一些,比如大 15-20%。我想知道是否还有其他特殊考虑;例如,和我一起工作的人告诉我使用 2^n - 1 个尺寸(不过我没有发现任何证据......)
我说的是初始表的创建。客户会告诉我们他们将开始向我们发送一个新表,并发送示例数据(或只是第一个生产数据集),我们会查看这些数据并在我们的一端制作一个表来保存数据。我们希望在我们的一端制作表格以处理未来的导入以及样本中的内容。但是,某些行肯定会变长,所以我们填充它们。
问题是多少,是否有技术指南?
越南语校对中的“tR”似乎有一些特别之处。知道的人能不能用简单的语言解释一下,不胜感激。此问题是在“越南语”整理的 SQL Server 上安装我们的产品期间发现的。模式中的一个表的名称中包含“tR”,但存储过程正在以所有小写的“tr”引用该表。而这个参考失败了。
我想这种情况类似于“?” 匹配其他排序规则中的“ss”。
这是一个复制品:
select case when 'tr' = 'tR' COLLATE SQL_Latin1_General_CP1_CI_AS then 'match' else 'no match' end
select case when 'tr' = 'tR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
select case when 'tr' = 'TR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
Run Code Online (Sandbox Code Playgroud)
结果:
-----
match
--------
no match
-----
match
Run Code Online (Sandbox Code Playgroud)
第二个 T-SQL 产生不匹配。't' 和 'R' 的其他组合则不然。
确定正在执行的存储过程的一种方法是使用“动态管理”方法,如下所示:
SELECT
sqlText.Text, req.*
FROM
sys.dm_exec_requests req
OUTER APPLY
sys.dm_exec_sql_text(req.sql_handle) AS sqltext
Run Code Online (Sandbox Code Playgroud)
但是,这仅显示存储过程的 create 语句的文本。例如:
CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想看看运行过程的参数是什么,导致它针对特定的一组违规参数运行这么长时间。
有没有办法做到这一点?(在这个问题中, Aaron Bertrand提到了DBCC InputBuffer,但我认为这不适合这个问题。)
有时我有一个 SQL 脚本,其中包含一个或多个超长(有时甚至是愚蠢的)字符串。通常这些是VARBINARY代表文件/程序集的文字/常量,但有时它们是文本。
真正长字符串的主要问题是一些文本编辑器不能很好地处理它们。例如,我VARBINARY在CREATE ASSEMBLY [AssemblyName] FROM 0x....语句中使用了一个文字,而程序集本身的大小刚好超过 1 MB,相当于文本文件中的字符超过 200 万个,因为每个字节需要两个字符以十六进制表示法表示(例如0x1F= a1和 an F)。SQL Server Management Studio (SSMS) 不能很好地处理这个问题,并在我尝试滚动该行时挂起几秒钟。事实上,某些版本(不确定这是否仍然发生)甚至会在打开至少有一行超过特定长度的脚本时显示关于长行的警告。
第二个问题是,在没有启用自动换行的编辑器中使用或在线发布时,它会使格式复杂化。这里的问题是水平滚动条的滑块非常窄,即使稍微移动它,通常也会将非超长文本滚动到视野之外。
现在,T-SQL 不会用换行符甚至分号终止命令(尽管从 SQL Server 2005 开始,分号是首选/推荐的)。因此,由于 SQL Server 知道如何解析每个语句,从而知道它何时结束,似乎将长行拆分为多行,仅由newline/ carriage-return+分隔line-feed,这似乎并不合理。但这在任何一种情况下都不起作用。
PRINT 'Line1
Line2';
Run Code Online (Sandbox Code Playgroud)
返回(在“消息”选项卡中):
Line1
Line2
Run Code Online (Sandbox Code Playgroud)
这很有意义,因为换行符在文字/常量内。但是对 a 执行此操作VARBINARY也不起作用。
PRINT 0x1234
5678;
Run Code Online (Sandbox Code Playgroud)
给我一个错误。
sql-server ×10
t-sql ×4
c# ×2
collation ×2
performance ×2
unicode ×2
ado.net ×1
dmv ×1
encoding ×1
hierarchy ×1
localization ×1
powershell ×1
random ×1
scripting ×1
sql-clr ×1
sqlcmd ×1
ssms ×1
storage ×1
transaction ×1
varchar ×1