2013-10-02 781 views
4

我有大的查詢 所以我不能使用鏈接的服務器在生產中的規則。 我通過一個varchar(max)這有8000多個字符。sp_executesql或exec(@var)太長。最大長度是8000

sp_executesql不支持超過8000個字符,那麼我如何執行我的字符串?

+0

入住這 http://stackoverflow.com/questions/4833549/nvarcharmax-still-being-truncated – Anjali

+0

問題不是@var或類型爲nvarchar(最大)的問題是sp_executesql,它只支持8000個字符 – angel

+0

如果限制在存儲過程參數中,您可能需要創建視圖來移動查詢之外的某些語句。 – Pekka

回答

2

nvarchar(max)應該可以在SQL Server 2008或更高版本上工作。如果您使用的是前一個版本,你可能需要將查詢拆分成多個變量:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/c26b1e1e-5900-43da-b462-02b1550bcfc3/how-to-use-sql-string-variable-larger-than-4000-character-in-sql-server-2005-stored-procedure

請問這項工作?:

declare @sql nvarchar(max) set @sql = N'select' + CONVERT(NVARCHAR(MAX),REPLICATE(' ', 8000)) + ' ''Above 8000 character limit test''' exec sp_executesql @sql

+0

問題是不是與@var或類型nvarchar(最大)的問題是與sp_executesql,它只支持8000個字符 – angel

+0

嗯...下面的代碼在SQL中工作嗎? 編輯:有一些錯誤粘貼在這裏的代碼。我會通知你。 – Ant

+0

哪個代碼?因爲它聲明瞭@x nvarchar(max)set @ x ='select 1 number union all select 2 as number union all select 3 as number'(等到這得到8000個以上的字符),這個工作如果@ x小於8000,但是當它超過8000時,這是行不通的,我得到的「太長了,最大長度是8000」 – angel

1

你有沒有嘗試聲明類似

declare @var_1 nvarchar(4000); 
declare @var_2 nvarchar(4000); 
     . 
     . 
     . 
declare @var_n nvarchar(4000); 

所以你做這樣的事情

exec(@var_1 + @var_2 + ....+ @var_n) 

希望這將幫助你

+0

問題不在於變量,問題在於Exec顯然只能接收到8000個字符,那麼如果我需要執行一個更大的字符串,我該如何執行? – angel

+0

這真的很舊我不知道是否仍然相關,但看看http://sqlmag.com/stored-procedures/character-limitation-spexecutesql –