【问题标题】:SQL Server - updating Varchar(max) column using stored procedureSQL Server - 使用存储过程更新 Varchar(max) 列
【发布时间】:2015-12-02 06:00:32
【问题描述】:

我有一个包含Email 列的表,即varchar(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)

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

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

【问题讨论】:

  • 如果表中的列是varchar(MAX),为什么存储的proc参数是nvarchar(max)?
  • 我想知道为什么电子邮件地址超过 8000 个字符? ,这个链接可以帮到你sqlservercentral.com/Forums/Topic647815-145-1.aspx
  • 使用 sql 配置文件查找从您的应用传递的实际数据。
  • @Harsh:已修复。它只是 varchar。
  • @JapzDivino:此列将保存电子邮件模板而不是电子邮件 ID。

标签: sql sql-server-2012


【解决方案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

【讨论】:

  • -1:从问题来看,似乎 OP 确实了解他在做什么,并且在特定情况下需要帮助。在这种情况下,发布指向 MSDN 文章的链接将无济于事。
  • @user2564977 我尊重你的意见,我只是想帮忙:) 问候
猜你喜欢
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多