小编Sol*_*zky的帖子

如何去除希伯来语重音标记

我需要一个字符编码技巧来去除希伯来语重音标记。

之前的样品

???????????? ??????? ????????? ??????????????? ???????????????

样品后

?????????????? ?? ????? ??????

sql-server collation encoding unicode

17
推荐指数
1
解决办法
1753
查看次数

我们是否需要在 C# 代码和存储过程中处理事务

我们真的需要 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)

sql-server ado.net t-sql transaction c#

17
推荐指数
1
解决办法
9994
查看次数

创建多个级别的层次结构,其中每个节点都有随机数量的子节点

我需要创建一些涉及层次结构的测试数据。我可以让它变得简单并做几个CROSS JOINs,但这会给我一个完全统一/没有任何变化的结构。这不仅看起来很乏味,而且测试数据缺乏变化有时会掩盖原本会发现的问题。所以,我想生成一个遵循以下规则的非统一层次结构:

  • 3 层深
    • 1 级随机 5 - 20 个节点
    • 级别 2 是 1 - 10 个节点,每个级别 1 的每个节点随机
    • 级别 3 是 1 - 5 个节点,每个级别 2 的每个节点随机
  • 所有分支都将有 3 层深。在这一点上,深度的均匀性是可以的。
  • 任何给定级别上的子节点的名称都可以重叠(即子节点的名称在同一级别的所有节点中不需要是唯一的)。
  • 术语“随机”在这里定义为伪随机,而不是唯一随机。这需要提及,因为术语“随机”通常用于表示“不产生重复的给定集合的随机排序”。我接受 random = random 并且如果级别 1 的每个节点的子节点数仅为 4、7 和 8,即使级别 1 上的 20 个节点每个节点的潜在分布为 1 - 10 个子节点,那很好,因为这就是随机。
  • 尽管使用嵌套WHILE循环可以很容易地做到这一点,但首选是找到一种基于集合的方法。一般而言,生成测试数据没有生产代码对效率的要求,但尝试基于集合的方法可能会更具教育意义,并有助于在未来找到基于集合的方法来解决问题。因此WHILE,不排除循环,但只有在不可能使用基于集合的方法时才能使用循环。
  • Set-based = 理想情况下是单个查询,无论 CTE、APPLY 等如何。因此使用现有或内联数字表很好。使用 WHILE / CURSOR / 程序方法是行不通的。我想将部分数据暂存到临时表或表变量中就可以了,只要操作都是基于集合的,没有循环。然而,话虽如此,单查询方法可能比多查询更受青睐,除非可以证明多查询方法实际上更好。另请记住,“更好”的构成通常是主观的;-)。还请记住,前一句中“典型地”的用法也是主观的。
  • 任何版本的 SQL Server(我想是 2005 和更新版本)都可以。
  • 只有纯 T-SQL:没有那些愚蠢的 SQLCLR 东西!!至少在生成数据方面。将使用 SQLCLR 创建目录和文件。但在这里,我只是专注于产生要创造的价值。 …

sql-server hierarchy random t-sql

16
推荐指数
2
解决办法
1万
查看次数

如何通过数据库获取特定实例的 CPU 使用率?

我发现以下查询可以按数据库检测 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)

performance sql-server sql-server-2012

15
推荐指数
1
解决办法
7万
查看次数

在 PowerShell 中通过 SQLCMD 连接到 LocalDB

我正在尝试使用 SQLCMD 实用程序通过 PowerShell 访问我计算机上的“localdb\MSSQLLocalDB”服务器。我使用的是 PowerShell v5、.NET v5.0,服务器名称是(localdb)\MSSQLLocalDB我在 Microsoft SQL Server Management Studio 2014 中连接到它时的名称。

PS C:\> sqlcmd -S localdb\MSSQLLocalDBPS 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 powershell sqlcmd sql-server-localdb

15
推荐指数
1
解决办法
2万
查看次数

SQL Server CLR 中的第 3 方 dll

我需要在 SQL Server CLR 的触发器 c# 代码中使用第三方 DLL

但是当我尝试添加引用时,它只显示来自 SQL Server 的一些 DLL。

如何将我的第三方 dll添加到 SQL Server?

sql-server c# sql-clr

14
推荐指数
2
解决办法
2万
查看次数

SQL Server 中有关 varchar 大小调整的当前最佳做法是什么?

我试图从存储和性能角度了解决定 varchar 列应该有多大的最佳方法。

性能
从我的研究来看,似乎varchar(max) 只应在您确实需要时使用;也就是说,如果该列必须容纳超过 8000 个字符,一个原因是缺乏索引(尽管我对一般的 varchar 字段的索引有点怀疑。不过,我对 DB 原则还很陌生,所以也许这是没有根据的) 和压缩(更多的是存储问题)。事实上,一般来说,人们似乎只推荐使用你需要的东西,当做 varchar(n)....oversizing 是不好的,因为查询必须考虑到最大可能的大小。但也有人表示,引擎将使用指示大小的一半作为数据平均实际大小的估计值。这意味着人们应该根据数据确定平均大小是多少,将其翻倍,并将其用作 n。对于具有非常低但非零可变性的数据,这意味着比最大尺寸大 2 倍,这看起来很多,但也许不是?见解将不胜感激。

存储
在阅读了行内与行外存储的工作原理后,并记住实际存储仅限于实际数据,在我看来,n 的选择实际上对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用 varchar(max) 也不会对存储产生任何影响。相反,如果可能,目标可能是将每个数据行的实际大小限制为 ~8000 字节。这是对事物的准确阅读吗?

上下文
我们的一些客户数据会稍微波动,因此我们通常将这些列的列设置得比它们需要的宽度稍宽一些,比如大 15-20%。我想知道是否还有其他特殊考虑;例如,和我一起工作的人告诉我使用 2^n - 1 个尺寸(不过我没有发现任何证据......)

我说的是初始表的创建。客户会告诉我们他们将开始向我们发送一个新表,并发送示例数据(或只是第一个生产数据集),我们会查看这些数据并在我们的一端制作一个表来保存数据。我们希望在我们的一端制作表格以处理未来的导入以及样本中的内容。但是,某些行肯定会变长,所以我们填充它们。

问题是多少,是否有技术指南?

performance sql-server best-practices varchar storage

14
推荐指数
1
解决办法
1万
查看次数

为什么在带有越南语_CI_AI 排序规则的 SQL Server 上,'tr' 和 'tR' 之间的比较会失败?

越南语校对中的“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' 的其他组合则不然。

sql-server collation unicode localization case-sensitive

14
推荐指数
1
解决办法
1032
查看次数

在 SQL Server 中,有没有办法确定传递给正在执行的存储过程的参数的值

确定正在执行的存储过程的一种方法是使用“动态管理”方法,如下所示:

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-server-2005 sql-server stored-procedures t-sql dmv

13
推荐指数
2
解决办法
2万
查看次数

SQL Server / T-SQL 是否支持换行以拆分长字符串?

有时我有一个 SQL 脚本,其中包含一个或多个超长(有时甚至是愚蠢的)字符串。通常这些是VARBINARY代表文件/程序集的文字/常量,但有时它们是文本。

真正长字符串的主要问题是一些文本编辑器不能很好地处理它们。例如,我VARBINARYCREATE 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 ssms scripting t-sql

13
推荐指数
1
解决办法
3630
查看次数