使用sp_executesql在SQL中执行非常长的语句

时间:2011-11-16 11:46:09

标签: sql-server sql-server-2008 tsql sp-executesql

我想执行大约10,000个字符的动态SQL语句。

当我使用如下的sp_executesql时:

DECLARE @stmt varchar(MAX)

SET @stmt = 'xxxxxxxx.................' which is about 10,000 characters

EXEC sp_executesql @stmt

我收到以下错误

The character string that starts with '  select t1.e_reference xxxxxxxxxxx' is too long. Maximum length is 8000. 

据我所知,我们可以使用sp_executesql来执行很长的语句,不是吗?

我使用的是SQL Server 2008企业版,64位。

我怎样才能做到这一点?感谢。

3 个答案:

答案 0 :(得分:8)

根据您在帖子中的回复,您使用的是linked server。 sp_executesql不会提出8000 char限制,但您可能在变量@stmt中使用 OPENQUERY

MSDN说明 OPENQUERY 的论点:

  

'query'查询字符串是在链接服务器中执行的。最大值   string的长度为8 KB。

http://msdn.microsoft.com/en-us/library/ms188427.aspx

要绕过这个,你可以使用

execute (@query) at oracle_linked_server

答案 1 :(得分:0)

MSDN说这有点模糊: “字符串的大小仅受可用数据库服务器内存的限制。在64位服务器上,字符串的大小限制为2 GB,最大大小为nvarchar(max)。” < / p>

在64位服务器上,限制为2GB。目前尚不清楚32位服务器的限制是什么?是4000,8000,无论有什么内存,2GB?

答案 2 :(得分:-1)

sp_executesql的@stmt参数的数据类型为nvarchar(8000),因此您已超出限制。

将SQL语句重构为较小的部分,或将SQL放入存储过程。