模式比较检测相同存储过程的差异
Schema Comparison Detects Differences for Identical Stored Procedures
我正在使用 Visual Studio 2012 架构比较工具来区分实际数据库与 Microsoft SQL 服务器 DAC 包文件 (dacpac
)。期望是数据库和文件是"equal"。但是,模式比较报告了三个存储过程 BodyScript
属性 的差异,所有这些都包含大量动态 SQL。但是,令人沮丧的是,在对象定义的实际差异中,存储过程的定义之间没有明显差异。此外,我们已将脚本复制到许多不同的差异工具中以查找空格类型的差异,但看起来这两个脚本的二进制文件是相同的。我们试过很多模式比较选项(忽略空格、忽略关键字大小写等),但似乎没有什么可以解决这个问题。
在研究这个问题时,我在 Microsoft Connect and also here on Whosebug 上遇到了类似的问题,但这些问题似乎尚未得到解决。有人对解决此问题的其他方法有任何建议吗?
看来这个问题是由字符串文字中的换行符引起的。
这很糟糕:
DECLARE @badQuery NVARCHAR(MAX) = N'SELECT
*
FROM
[dbo].[MyRadTable]';
这个不错:
DECLARE @goodQuery NVARCHAR(MAX) = N'SELECT '+
'* ' +
'FROM ' +
'[dbo].[MyRadTable]';
我正在使用 Visual Studio 2012 架构比较工具来区分实际数据库与 Microsoft SQL 服务器 DAC 包文件 (dacpac
)。期望是数据库和文件是"equal"。但是,模式比较报告了三个存储过程 BodyScript
属性 的差异,所有这些都包含大量动态 SQL。但是,令人沮丧的是,在对象定义的实际差异中,存储过程的定义之间没有明显差异。此外,我们已将脚本复制到许多不同的差异工具中以查找空格类型的差异,但看起来这两个脚本的二进制文件是相同的。我们试过很多模式比较选项(忽略空格、忽略关键字大小写等),但似乎没有什么可以解决这个问题。
在研究这个问题时,我在 Microsoft Connect and also here on Whosebug 上遇到了类似的问题,但这些问题似乎尚未得到解决。有人对解决此问题的其他方法有任何建议吗?
看来这个问题是由字符串文字中的换行符引起的。
这很糟糕:
DECLARE @badQuery NVARCHAR(MAX) = N'SELECT
*
FROM
[dbo].[MyRadTable]';
这个不错:
DECLARE @goodQuery NVARCHAR(MAX) = N'SELECT '+
'* ' +
'FROM ' +
'[dbo].[MyRadTable]';