【问题标题】:sp_executesql or exec(@var) is too long. Maximum length is 8000sp_executesql 或 exec(@var) 太长。最大长度为 8000
【发布时间】:2013-10-08 23:37:55
【问题描述】:

我有大量查询 所以我不能按规则在生产中使用链接服务器。 我传递了一个varchar(max),它有超过 8000 个字符。

但是sp_executesql 不支持超过 8000 个字符,那么我该如何执行我的字符串?

【问题讨论】:

  • 问题不是 @var 或 type nvarchar(max) 问题是 sp_executesql,它只支持 8000 个字符
  • 如果限制在存储过程参数中,您可能需要创建视图以将某些语句移到查询之外。

标签: sql-server-2005 varchar sp-executesql large-data


【解决方案1】:

nvarchar(max) 应该可以在 SQL Server 2008 或更高版本上运行。

这行得通吗?:

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

如果您使用的是之前的版本,您可能需要将查询拆分为多个变量:

How to use SQL string variable larger than 4000 character in SQL server 2005 Stored Procedure?

【讨论】:

  • 问题不是 @var 或 type nvarchar(max) 问题是 sp_executesql,它只支持 8000 个字符
  • 嗯...以下代码在您的 SQL 中有效吗?编辑:在此处粘贴代码时出现一些错误。我会发消息给你的。
  • 哪个代码?声明 @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”
  • 您使用的是什么版本的 SQL Server?
  • 其他版本有区别吗?我正在使用 2005
【解决方案2】:

你有没有尝试声明类似的东西

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

所以你做这样的事情

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

希望对你有帮助

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2010-11-05
  • 2011-09-03
  • 2012-05-31
  • 2015-05-15
  • 2015-06-22
相关资源
最近更新 更多