相关疑难解决方法(0)

SQL NVARCHAR和VARCHAR限制

总之,我有一个很大的(不可避免的)动态SQL查询.由于选择标准中的字段数,包含动态SQL的字符串增长超过4000个字符.现在,我知道有一个4000最大值设置NVARCHAR(MAX),但查看Server Profiler中执行的SQL语句

DELARE @SQL NVARCHAR(MAX);
SET @SQL = 'SomeMassiveString > 4000 chars...';
EXEC(@SQL);
GO
Run Code Online (Sandbox Code Playgroud)

似乎工作(!?),对于另一个同样大的查询,它会抛出一个与此4000限制(!?)相关的错误,它基本上修剪了这个4000限制之后的所有SQL,并且给我留下了语法错误.尽管这样的探查,它表示在这个动态的SQL查询(!?).

究竟发生了什么,我应该将这个@SQL变量转换为VARCHAR并继续使用它吗?

谢谢你的时间.

PS.能够打印超过4000个字符来查看这些大查询也是很好的.以下限制为4000

SELECT CONVERT(XML, @SQL);
PRINT(@SQL);
Run Code Online (Sandbox Code Playgroud)

还有其他很酷的方式吗?

sql sql-server variables string-concatenation sql-server-2008

97
推荐指数
2
解决办法
17万
查看次数

如何从变量运行超过8000个字符的SQL语句?

我可以使用以下代码进行微小的查询:

DECLARE @sql VARCHAR(8000)
SET @sql = 'SELECT * FROM myTable'
Exec @sql
Run Code Online (Sandbox Code Playgroud)

上面的方法对于维护大量代码非常有用,特别是当我们需要进行一次更改并将它们反映到任何地方时.

我的问题是我想要提供给@sql变量的查询(它只有一个查询)使用超过25个表连接,其中一些在临时表变量上,包含复杂的操作,因此长度超过8000个字符.

我希望使用TEXT数据类型来存储此查询,但MSDN显示一条警告消息,Microsoft正计划从其下一版本中删除Text,NText和Image数据类型.我希望我的代码也能在未来运行.

我想将这个查询存储在一个单独的文件中,但由于它使用表变量和其他特定于过程的参数的连接,我怀疑这是否可行.

请告诉我一个将大型查询存储到变量中并在过程中多次执行的方法.

sql t-sql sql-server varchar sql-server-2008

20
推荐指数
4
解决办法
6万
查看次数

sp_executesql或exec(@var)太长。最大长度为8000

我的查询量很大,因此无法按规则在生产中使用链接服务器。我通过了一个varchar(max)有8000个字符以上的字符。

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

varchar sql-server-2005 large-data sp-executesql

5
推荐指数
1
解决办法
7993
查看次数

Nvarchar(max)在SQL Server中缩小到4000个字符

我在存储过程中创建一个动态查询,当我尝试打印该动态查询时,它只打印整个查询的一部分.

我的变量包含整个动态查询,如下所示

DECLARE @SQL NVARCHAR(MAX)
Run Code Online (Sandbox Code Playgroud)

当我像下面那样打印变量的长度时,它给出了整个查询的长度,这很好.

PRINT LEN(@SQL)
Run Code Online (Sandbox Code Playgroud)

但是,当我打印脚本本身时,它只打印整个查询的一部分.

PRINT @SQL
Run Code Online (Sandbox Code Playgroud)

我也尝试打印它如下

PRINT CONVERT(NVARCHAR(MAX),@SQL)
Run Code Online (Sandbox Code Playgroud)

为什么它只打印第一个4000chars?我究竟做错了什么?

sql sql-server

1
推荐指数
1
解决办法
1291
查看次数