我有一些输入数据,其中包含一些比相应数据库字段更长的“捣蛋”字段。这会导致我的导入脚本(使用SQL INSERT语句)出现警告并失败:
Msg 8152, Level 16, State 13, Line 2
String or binary data would be truncated.
如何强制截断这些字段并使我的脚本能够完成?我有一些输入数据,其中包含一些比相应数据库字段更长的“捣蛋”字段。这会导致我的导入脚本(使用SQL INSERT语句)出现警告并失败:
Msg 8152, Level 16, State 13, Line 2
String or binary data would be truncated.
如何强制截断这些字段并使我的脚本能够完成?当你插入时,可以执行类似以下操作:
INSERT INTO Table1('Column1') VALUES(LEFT(RTRIM(InputField), MaxLength))
你只会把左边的N个字符存储到数据库中。
使用 Ansi 警告? http://msdn.microsoft.com/zh-cn/library/ms190368(v=sql.110).aspx
DECLARE @TABLE TABLE
(
Data VARCHAR(3)
)
SET ANSI_WARNINGS OFF
INSERT INTO @TABLE
VALUES('Hello World')
SELECT * FROM @TABLE
SET ANSI_WARNINGS ON
INSERT INTO @TABLE
VALUES('Goodbye World')
SELECT * FROM @TABLE
我不知道除了查找和使用LEFT()
之外是否有更简单的方法。不过如果有的话,我很想知道。
显然,使用元数据如INFORMATION_SCHEMA.COLUMNS
,你可以自动确定这个长度,并将其脚本化以执行相应长度的LEFT()
操作。