将 varbinary 数据插入 SQL Server 数据库

28

我有这张表:

   (<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

但是我遇到了这个错误:

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


2
在 SQL Server 的未来版本中,ntexttextimage 数据类型将被移除。请避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)varchar(max)varbinary(max)详见此处 - marc_s
1
这个问题在这里得到了回答:https://dev59.com/02ox5IYBdhLWcg3wtmc1 - StrangerTides
1个回答

37

有两个问题:

问题 #1: 不要再使用TEXT - 它已经被弃用了。使用一个合适大小的VARCHAR(n),或者如果你真的必须(只有在你真的必须时),使用VARCHAR(MAX)

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 - Saeger
1
非常感谢Marc_s,它立即将我的“text”转换为“varbinary”。这非常简单。 - Nad
2
我喜欢这个答案,但我想讨论和学习是否真的有必要为已经特定的领域使用更具表现力的名称。我的意思是,如果一个人可以像store.employee.namestore.client.name这样访问名称列,那么它更加简洁而且仍然足够清晰,比起一遍又一遍地重复树形命名,因为我们也可以在多个数据库中拥有不同的员工和客户表,它们可以被称为store.store_client.store_client_nameenterprise.enterprise_client.enterprise_client_name,例如,遵循相同的原则。最好的问候。 - dandev486

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接