无法在NVARCHAR和VARCHAR中存储5000个字符

时间:2016-05-21 11:58:10

标签: sql sql-server stored-procedures varchar nvarchar

我必须在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的大小?我看过很多帖子,但我无法完成。请帮帮我?

3 个答案:

答案 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)

的大小