我输入的数据包含一些比相应数据库字段长的"流氓"字段.这会导致我的导入脚本使用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/en-GB/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
我个人希望他们失败然后查看数据.我不相信你应该考虑自动截断数据.你可以通常需要让你的场地定义更大.除非您直观地检查会失败的行,否则您将无法知道.
示例:我们存储语音标题.假设您有两个标题:
如何阅读书籍:
如何在不弄湿的情况下阅读浴缸中的书籍
现在,如果你的字段有10个字符,那么它们将被截断为相同的东西.而且他们被截断的东西甚至没有意义.两者都会说"如何Rea"现在你没有任何区别可能会有两个非常不同的标题,你所拥有的东西无论如何都是不正确的.调整字段以存储更多字符显然是正确的做法.这个例子很傻,但垃圾进去,垃圾出来.如果截断人员或其他关键数据的名称,最终会出现问题,因为您有垃圾数据.我已经看到这种情况发生在我们的语音标题,last_names,地址,电话号码和许多其他数据.如果你必须截断数据,那么你很可能无论如何都要为该记录存储无用的数据.