Ale*_*xei 3 sql-server sql-server-2014
在像某些情况下这一个,SQL Server将默默地截断(N)VARCHAR值,导致严重的数据丢失时,错误地声明变量。
问题:可以将 SQL Server 配置为不以静默方式截断 VARCHAR 值吗?(并发出错误/引发异常)
不,没有办法改变这种行为。但是这种截断只发生在变量和参数分配中,而不是表插入中。
例如
declare @str varchar(8) = 'some very long string'
Run Code Online (Sandbox Code Playgroud)
将被无声地截断
但插入:
create table #t(a varchar(8))
insert into #t(a) values('some very long string')
Run Code Online (Sandbox Code Playgroud)
会失败
Msg 8152, Level 16, State 14, Line 7
String or binary data would be truncated.
Run Code Online (Sandbox Code Playgroud)
这是 TSQL 允许使用隐式转换的结果,这在许多情况下很方便,但有时很麻烦。