SQL Server - 使用存储过程更新Varchar(max)列

时间:2015-12-02 06:00:32

标签: sql sql-server-2012

我的表包含Emailvarchar(MAX),我正在尝试使用存储过程更新它。当字符串长度大于8000个字符时,我收到此错误

  

字符串或二进制数据将被截断。声明一直如此   终止。

存储过程:

ALTER PROCEDURE [dbo].[SaveData]
    @Id BIGINT,
    @Email varchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE tb_data
    SET Email = @Email
    WHERE Id = @Id  
END

请注意,电子邮件的数据类型设置为varchar(MAX)

有趣的是,当我尝试手动运行更新查询时,它可以工作!

我已经多次这样做了,但无法弄清楚为什么它在这种情况下不起作用。

1 个答案:

答案 0 :(得分:-1)

希望这可以帮到你:

Microsoft MSDN

Maximum Capacity Specifications for SQL Server

1个字节= 1个字符>> 2 ^ 31-1个字符

varchar [(n | max)]

  

可变长度的非Unicode字符串数据。 n定义字符串长度,可以是1到8,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。 varchar的ISO同义词是char变化或字符变化。

How many characters in varchar(max)

Maximum size of a varchar(max) variable