不能在 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)
我必须在 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)