SQL Server / SSIS - 动态T-SQL,NVARCHAR(MAX)差异

时间:2010-12-10 09:40:33

标签: sql-server tsql ssis

我正在编写一些动态SQL:

DECLARE @sql NVARCHAR(MAX)

SET @sql = '...'

EXEC sp_executesql @sql

如果我从SSMS执行此操作,则查询会成功执行,因为它小于8000(精确到7787)个字符。如果我从SSIS执行此操作(使用ADO.NET连接),查询将失败,因为NVARCHAR(MAX)等同于NVARCHAR(4000)

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

我的解决方法有哪些选择?

1 个答案:

答案 0 :(得分:2)

对我来说,我会这样(按照优先顺序):

  1. 在不使用动态SQL的情况下找到一种方法(这样的大型动态脚本必须是调试或更改的噩梦)......

  2. 将其中的一部分拆分为存储过程并从动态SQL中调用它们。

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