1

我想执行大约 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 位。

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

4

3 回答 3

8

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

MSDN 谈到了OPENQUERY的论点:

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

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

为了绕过这个,你可能会使用

execute (@query) at oracle_linked_server
于 2012-12-10T11:06:40.517 回答
0

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

在 64 位服务器上,限制为 2GB。不清楚 32 位服务器的限制是什么?是 4000 还是 8000,无论可用内存,2GB 吗?

于 2013-09-26T04:10:42.143 回答
-1

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

要么将 SQL 语句重构为更小的部分,要么将 SQL 放入存储过程中。

于 2011-11-16T11:50:21.487 回答