2010-07-06 69 views
3

我記得在那天我會做的nvarchar(4000)瓦爾整體怪人,檢查他們的,因爲他們成長的長度,切換出來,因爲他們填補了,然後一起串聯全亂了exec調用。我想知道是否有更簡單的方法。如何執行非常長的動態sql語句?

謝謝!

編輯:

代碼示例,說明我搞砸了case語句

DECLARE @sql NVARCHAR(MAX) 
SELECT @sql = CAST(N'SELECT ' AS NVARCHAR(MAX)) 

DECLARE @Index INT 
SELECT @Index = 0 

WHILE (@Index < 1000) 
BEGIN 
SELECT @sql = CAST(@sql AS NVARCHAR(MAX)) + CAST(N'   ' AS NVARCHAR(MAX)) + CAST(CASE @Index WHEN 1 THEN N' ' END AS NVARCHAR(MAX)) 
SELECT @Index = @Index + 1 
END 
SELECT @sql = CAST(@sql AS NVARCHAR(MAX)) + CAST(1 AS NVARCHAR(MAX)) 

SELECT LEN(@sql) 
EXECUTE sp_executesql @sql 
+7

我可能不明白這個問題,但爲什麼不使用nvarchar(MAX)變量(s) - (SQL 2005及更高版本)? – Tommy 2010-07-06 21:38:34

+0

什麼問題?動態SQL意味着字符串連接... – 2010-07-06 21:46:00

+1

@Tommy - 添加您的評論作爲答案。現貨上 – AdaTheDev 2010-07-06 21:52:38

回答

6

sp_executesql接受類型NVARCHAR(MAX),它可以長到2GB的參數。有沒有需要任何噱頭,因爲NVARCHAR(MAX)類型支持所有的字符串操作(串聯,更換等):

[ @statement= ] statement

Is a Unicode string that contains a Transact-SQL statement or batch. 

語句必須是一個Unicode 不變或一個Unicode變量。更復雜的 Unicode表達式,如 連接兩個字符串與+ 操作,是不允許的。不允許使用字符 常量。如果指定了一個 Unicode常量,則必須以 爲前綴。例如, Unicode常量N'sp_who'有效,但字符常量 'sp_who'不是。所述 串的大小隻受可用 數據庫服務器內存的限制。在64位 服務器,所述字符串的大小是 限制爲2 GB, 爲nvarchar(最大值)的最大大小。

+0

讓希望我得到部署SQL Server上的這種應用2005 + – 2010-07-06 22:46:40

+0

只是要留意的一些字符串函數: DECLARE @x爲nvarchar(最大) SET @ X = REPLICATE( 'A',10000) SELECT LEN(@x) - 8000 - 需要設置@x = REPLICATE(CAST( 'A' AS爲nvarchar(MAX)),10000) – 2010-07-07 01:35:06

+0

我還可以不要讓我的NVARCHAR(MAX)var超過4k個字符。 :( – 2010-07-07 18:02:47

2

EXEC(@YourSQL)

OR

sp_exectesql如果您希望繼續建立到你的動態SQL和執行。

=)