首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用sp_executesql在TSQL中执行非常长的语句。

使用sp_executesql在TSQL中执行非常长的语句。
EN

Stack Overflow用户
提问于 2011-11-16 19:46:09
回答 3查看 13.9K关注 0票数 1

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

当我使用sp_executesql时,如下所示:

代码语言:javascript
复制
DECLARE @stmt varchar(MAX)

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

EXEC sp_executesql @stmt

我得到了以下错误

代码语言:javascript
复制
The character string that starts with '  select t1.e_reference xxxxxxxxxxx' is too long. Maximum length is 8000. 

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

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

我如何才能做到这一点?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2012-12-10 19:06:41

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

MSDN对OPENQUERY的论点这样说:

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

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

要绕过这一步,您可能可以使用

代码语言:javascript
复制
execute (@query) at oracle_linked_server
票数 8
EN

Stack Overflow用户

发布于 2013-09-26 12:10:42

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

在64位服务器上,此限制为2 2GB。目前还不清楚32位服务器的限制是什么?它是4000,8000,任何可用的内存,2 2GB?

票数 0
EN

Stack Overflow用户

发布于 2011-11-16 19:50:21

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8151121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档