【问题标题】:Insert varbinary data into SQL Server database将 varbinary 数据插入 SQL Server 数据库
【发布时间】:2014-08-25 13:50:58
【问题描述】:

我有这张桌子:

   (<NUM_TRF int
   ,<NAME, varchar(255),>
   ,<DESCRIPTION, text,>
   ,<REPORT, varbinary(max),>)

我尝试在 SQL Server 2008 中创建一个脚本,以便在我的本地数据库中插入一行,

INSERT INTO [MY_DB_APP].[dbo].[CONNECT_USER]
VALUES(1, 'name', 'description', Cast('wahid' As varbinary(max)) )
GO

但我收到此错误:

字符串或二进制数据将被截断。
该语句已终止。

【问题讨论】:

  • ntexttextimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)varbinary(max)See details here
  • 这个问题在这里得到解答:stackoverflow.com/questions/9021873/…

标签: sql-server sql-server-2008


【解决方案1】:

两个问题:

问题 #1:不要再使用 TEXT - 它已被弃用。使用VARCHAR(n)n 的合适大小,或者如果您真的 必须(仅当您REALLY 必须),请使用@ 987654324@

CREATE TABLE dbo.CONNECT_USER
(
    NUM_TRF int,
    NAME varchar(255),
    DESCRIPTION varchar(1000),
    REPORT varbinary(max)
)

我个人也会避免将所有内容都全部大写 - 这只会让阅读变得更加困难!我会尽量避免像NameDescription 这样非常通用 的列名——这些不是很直观,并且可能与其他表的列和/或SQL Server 保留关键字发生冲突。尝试在您的环境中使用更具表现力、更多与上下文相关的列名(ConnectUsername 或其他)

问题 #2:在执行 INSERT 时,我建议始终定义要插入的列。这样可以避免在重组表或添加新列时出现令人不快的意外:

INSERT INTO [MY_DB_APP].[dbo].[CONNECT_USER](NUM_TRF, NAME, DESCRIPTION, REPORT)
VALUES(1, 'name', 'description', CAST('wahid' AS VARBINARY(MAX)))
GO

【讨论】:

  • 如果你们正在寻找清理 varbinary 列的东西,请使用:update COLUMN set TABLE = cast('1' as varbinary(max)) where TABLE.CODE > 0
  • 非常感谢 marc_s,它立即将我的 text 转换为 varbinary。很简单
  • 我喜欢这个答案,但我想讨论并了解是否真的有必要为已经特定的域使用更具表现力的名称。我的意思是,如果可以访问诸如store.employee.namestore.client.name 之类的名称列,则比重复树命名更简洁,因为我们还可以在多个数据库上拥有不同的员工和客户表,例如,它们可以称为store.store_client.store_client_nameenterprise.enterprise_client.enterprise_client_name,遵循相同的原则。最好的问候。
猜你喜欢
  • 2017-10-22
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2019-11-22
相关资源
最近更新 更多