2010-12-10 53 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