2

即,如果我创建一个 VARCHAR(50) 字段,如果我尝试为其分配一个 100 个字符长的值会发生什么?

SQL Server 会让我这样做吗?它是否效率较低?

4

3 回答 3

10

如果您尝试将大字符串强制转换为较小大小的变量,则传入的字符串将被简单地截断为适当的大小。

declare @Variable varchar (50)
set @Variable = replace (SPACE (100), ' ' , '.')
print @Variable 

输出长度为 50 个字符

..................................................

如果您尝试将大字符串强制转换为表中的小字段,则会引发错误

declare @MyTable Table
(
    TestVariable varchar (50)
)
insert into @MyTable (TestVariable) select replace (SPACE (100), ' ' , '.')
select * from @MyTable 

输出是

Msg 8152, Level 16, State 14, Line 6
String or binary data would be truncated.
The statement has been terminated.
TestVariable
------------------------------------------------
于 2010-03-17T17:39:22.787 回答
3

它会抛出一个错误,指出该值将被截断。它不会写入超过您指定的 50 个字符,否则您将无法防止行大小失控

于 2010-03-17T17:36:56.893 回答
1

SQL Server 会让我这样做吗?它是否效率较低?

它会发出一个错误,说字符串或二进制数据将被截断。

于 2010-03-17T17:39:13.377 回答