不能在 NVARCHAR 和 VARCHAR 中存储 5000 个字符

cannot store 5000 chars in NVARCHAR and VARCHAR

我必须在 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 的大小?我读了很多 post 但我无法完成。请帮帮我?

请改用 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

来自 MSDN

Variable-length, non-Unicode string data. n defines the string length and can be a value from 1 through 8,000. max indicates that the maximum storage size is 2^31-1 bytes (2 GB). The storage size is the actual length of the data entered + 2 bytes. The ISO synonyms for varchar are char varying or character varying.

因此只需指定(最大)

大小

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)