我有这张桌子:
(<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
但是我收到了这个错误:
字符串或二进制数据将被截断 声明已经终止。
答案 0 :(得分:23)
两个问题:
问题#1 :不再使用TEXT
- 已弃用。使用VARCHAR(n)
n
的合适尺寸,或者真的必须(仅当 真的 必须时) ),使用VARCHAR(MAX)
CREATE TABLE dbo.CONNECT_USER
(
NUM_TRF int,
NAME varchar(255),
DESCRIPTION varchar(1000),
REPORT varbinary(max)
)
我个人也会避免在所有大写中写一切 - 这只是让它更难阅读!我会尽量避免非常泛型列名称,如Name
或Description
- 这些列名不是很直观,可能会与其他表的列和/或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