小编Rob*_*gie的帖子

如何比较大型存储过程?

我想通过检索和比较来自 sys.sql_modules 的定义来比较在几个不同数据库中应该相同的存储过程。

目前我正在考虑“相同”的程序,除了一个或其他副本在开始或结束时有空行或其他空格。这些似乎是通过制作程序脚本来添加的。我想删除空行等并比较剩下的内容。所以我可以这样做:

IF ( LEFT(@definition1, 2) = NCHAR(13) + NCHAR(10) )
    SET @definition1 = SUBSTRING(@definition1, 3, 1048576)
Run Code Online (Sandbox Code Playgroud)

如果过程的长度小于 1048576 字节,这将起作用。但是长度的实际限制是多少——如果有的话?

我想实际上我应该问:比较程序的好方法是什么?(除了“从 Red Gate 购买 SQL 比较实用程序”。)

更新

(修订)我刚刚意识到 sys.sql_modules.definition 具有数据类型 nvarchar(max) 并且具有指定的长度......以字节为单位,POWER(2, 31)-1,除了该公式不起作用;- ) 在 nchar 字符中,不超过 POWER(2, 30)-1。

所以这应该这样做:

IF ( LEFT(@definition1, 2) = NCHAR(13) + NCHAR(10) )
    SET @definition1 = SUBSTRING(@definition1, 3, 2147483647)
Run Code Online (Sandbox Code Playgroud)

是的,那是 2^31-1,它应该是 2^30-1,但只要它大于 @definition1 是或可以是,我就可以逃脱。直到他们将“max”增加到 2^63-1 字节。在有“最大”之前,我使用了 8000。

也许我应该包括仔细检查 DATALENGTH() 以防它意外地被截断到某处的前 8000 个字节。

至于你关于良好的代码管理首先不需要这种需求的明智之言 - 有用的弹药,谢谢你(现在从我自己的隐藏中提取子弹)。我认识到有条不紊的工作实践的价值,即使它们也适用于我。但问题在于管理层,假设他们只是想要一份报告或结果 - 现在 - 并且多年来一直在获得和期待这样的服务 - 现在他们已经学会称之为“敏捷”。

schema sql-server procedure-definition

5
推荐指数
2
解决办法
2071
查看次数

MS SQL Server 2014:哪个存储过程是我的错误?

作为 Microsoft SQL Server 2014 上的一三个一般问题,也许我应该已经知道答案,或者甚至可能曾经知道 -

当我的存储过程运行其他存储过程时,如何找出哪个存储过程的代码产生了错误?

是否有一种特殊的方法来处理来自 Transact-SQL 的错误,以标识给定存储过程中的错误位置?

存储过程中的程序代码能否获得它所在过程的名称?

如果这是唯一的方法,我准备将“SET @MyNameIs = N'HastilyWrittenProcedure”放入程序代码中。然后我可以输入“PRINT @MyNameIs + 'break.'。" 在所有的错误处理程序中。

sql-server stored-procedures error-handling sql-server-2014

4
推荐指数
3
解决办法
521
查看次数

如何从 RAND 函数(或其他地方)获得令人满意的随机数?

我正在为应用程序用户创建一个伪随机数据集进行训练。

我很惊讶,如果我用 1、2、3 等为 RAND() 函数设置种子,我从种子函数中得到几乎相同的结果。但是,当未提供种子时,这似乎是“适当随机”但可重复的值。

SELECT   RAND(1) AS R1A, RAND() AS R1B, RAND(2) AS R2A, RAND() AS R2B,
         RAND(3) AS R3A, RAND() AS R3B, RAND(4) AS R4A, RAND() AS R4B

0.713591993212924

0.472241415009636  

0.713610626184182  

0.217821139260039  

0.71362925915544  

0.963400850719992  

0.713647892126698  

0.708980575436056
Run Code Online (Sandbox Code Playgroud)

乍一看,我似乎可以评估 RAND(@seed) 并丢弃结果,然后评估 RAND() 以获得我的训练数据的几个真正“随机”的数字 - 到目前为止,我计划每条记录使用四个;我可能还需要一些。

那个计划能正常运作吗?而且,我在看什么,在这里?而且,它应该在文档中吗?我还没找到

文档说明了这一点,这可能是一个线索:

RAND 函数是一个伪随机数生成器,其运行方式类似于 C 运行时库 rand 函数。如果没有提供种子,系统会生成自己的可变种子编号。

C 中的 rand 函数是否为相似的种子输入产生相似的输出?

我认为文档还可以更清楚地说明 RAND(@number) 后跟 RAND() 总是生成相同的数字。但这就是我想要的,也是任何有经验的计算机程序员都会期望的。

我想我可以用从https://www.random.org/获得的随机数据键来填充表格以 用于此目的 - 但这有缺点。

更新,临时结论

我对 RAND() 有以下结论,现在我想我会继续下去,但要记住替代方案。

RAND(@int) 使用给定的整数值设置随机数生成器的种子,并返回一个在统计上独立的浮点结果,因为 RAND(@int) 和 RAND(@int+1) …

sql-server-2005 sql-server random sql-server-2014

3
推荐指数
1
解决办法
3227
查看次数