将varbinary数据插入SQL Server数据库

Wah*_*zah 19 sql-server sql-server-2008

我有这张桌子:

   (<NUM_TRF int
   ,<NAME, varchar(255),>
   ,<DESCRIPTION, text,>
   ,<REPORT, varbinary(max),>)
Run Code Online (Sandbox Code Playgroud)

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

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

但我得到这个错误:

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

mar*_*c_s 25

两个问题:

问题#1:不再使用TEXT- 它已被弃用.使用VARCHAR(n)合适尺寸的n,或者如果你真的必须(只有你真的必须),使用VARCHAR(MAX)

CREATE TABLE dbo.CONNECT_USER
(
    NUM_TRF int,
    NAME varchar(255),
    DESCRIPTION varchar(1000),
    REPORT varbinary(max)
)
Run Code Online (Sandbox Code Playgroud)

我个人也会避免在所有大写中写一切 - 这只是让它更难阅读!而且我会尽量避免非常普通的像列名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
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案,但我想讨论和了解是否真的有必要为已经特定的域使用更具表现力的名称。我的意思是,如果可以访问诸如“store.employee.name”和“store.client.name”之类的名称列,那么比完全重复树命名会更简洁,而且仍然足够清晰,因为我们还可以有不同的名称。多个数据库上的员工和客户表,例如,遵循相同的原则,它们可以称为“store.store_client.store_client_name”和“enterprise.enterprise_client.enterprise_client_name”。此致。 (2认同)