2010-12-10 81 views
1

我写一些动态SQL:SQL服务器/ SSIS - 动态T-SQL,NVARCHAR(MAX)差异

DECLARE @sql NVARCHAR(MAX) 

SET @sql = '...' 

EXEC sp_executesql @sql 

如果我从SSMS执行此,查询成功执行,因为它是小于8000( 7787为准确)字符。如果我从SSIS执行此操作(使用ADO.NET连接),查询失败,因为NVARCHAR(MAX)相当于NVARCHAR(4000)

我知道这是与兼容性有关的事情 - 来自SSIS的连接需要支持的不仅仅是SQL Server。

我的解决方法选项是什么?

回答

2

对于我来说,我会走这条路(按优先顺序排列):

  1. 找到一个方法来做到这一点,而无需使用动态SQL(这么大的动态脚本必须是一个噩梦调试或更改)...

  2. 将其中的一部分分成存储过程并从动态SQL中调用这些存储过程。

  3. 将其拆分为多个较小的子查询。

+1

我同意Paddy,不要使用动态SQL,如果你不是绝对需要的话。而选项2当然也是有意义的。 – grapefruitmoon 2010-12-10 09:53:34

+0

我完全同意。这是几年来迫切需要适当调整的代码片段之一。 – youwhut 2010-12-10 10:10:45

+0

@youwhut - 祝你好运,在这种情况下:) – Paddy 2010-12-10 10:16:09