我必须在SP中创建动态sql查询。动态查询是5000个字符,我使用NVARCHAR(MAX),VARCHAR(MAX),NVARCHAR(6000),VARCHAR(6000),但它们都截断为4000个字符
DECLARE @SCRIPT VARCHAR(8000)
set @SCRIPT =' ASDADASD ASDA DSADAD AD AS D......' +@VAR1+ ' AWDAWd' -- 6000 CHARS
PRINT LEN(@SCRIPT) -- THIS PRINTS "4000"
PRINT @SCRIPT -- THIS PRINTS ONLY 4000 CHARS
如何增加STRING的大小?我看过很多帖子,但我无法完成。请帮帮我?
答案 0 :(得分:2)
请改用nvarchar(max)
数据类型。
请务必使用N指示符(N' ASDADASD...'
)作为字符串文字的前缀。显式转换,因此默认限制将不适用:
set @script=convert(nvarchar(max),N'very-long-literal')
(参考:The weird length of varchar and nvarchar in T-SQL)
编辑:完整的工作示例:
DECLARE @SCRIPT nvarchar(max)
SET @SCRIPT=convert(nvarchar(max),N' ASDADASD ASDA DSADAD AD AS D......')+replicate(convert(nvarchar(max),N'A'),6000)
PRINT LEN(@SCRIPT) -- this prints "6036"
PRINT @SCRIPT -- this prints all 6036 chars of the string
答案 1 :(得分:1)
NVARCHAR(n)限制为4000,VARCHAR + NVARCHAR = NVARCHAR。看看
DECLARE @SCRIPT VARCHAR(8000)
set @SCRIPT = replicate('A',6000)+'A'
select len(@SCRIPT)
set @SCRIPT = replicate('A',6000)+N'A'
select len(@SCRIPT), 'mind NVARCHAR'
确保一切NVARCHAR(MAX)。
DECLARE @SCRIPT NVARCHAR(MAX) =replicate('A',7000)
set @SCRIPT = @SCRIPT +'A'
select len(@SCRIPT)
set @SCRIPT = @SCRIPT + cast(replicate('A',6000) as NVARCHAR(MAX))
select len(@SCRIPT)
答案 2 :(得分:0)
来自MSDN
可变长度的非Unicode字符串数据。 n定义字符串长度,可以是1到8,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。 varchar的ISO同义词是char变化或字符变化。
所以只需指定(max)
的大小