SQL variable
数据类型与表column
数据类型之间有什么区别。
考虑以下示例:
DECLARE @variable CHAR(1)
SET @variable = 'quarter'
SELECT @variable --works
结果:Q
但是当我在表格中执行同样的操作时会出现错误
DECLARE @table TABLE
(
col CHAR(1)
)
INSERT INTO @table
VALUES ('quarter') --Fails
消息8152,级别16,状态14,行9字符串或二进制数据将是 截断。
我通过MSDN了解DECLARE @local_variable仍然没有得到任何答案。谁能告诉我是什么原因。
答案 0 :(得分:3)
主要区别在于.getHours()
与SET
中的警告是如何工作的,这里是SET ANSI_WARNINGS documentation
设置为ON时,除零和算术溢出错误会导致语句回滚并生成错误消息。设置为OFF时,除零和算术溢出错误会导致返回空值。发生除零或算术溢出错误导致返回空值的行为
INSERT
对于字符列,将忽略尾随空白,对于二进制列,将忽略尾随空值。当OFF时,数据被截断为列的大小,语句成功。
但是,它不会影响SET语句:
在存储过程,用户定义函数中传递参数或在批处理语句中声明和
if an INSERT or UPDATE is tried on a character, Unicode, or binary column in which the length of a new value exceeds the maximum size of the column. If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard.
时,不遵守ANSI_WARNINGS。例如,setting variables
和INSERT或UPDATE语句成功。
所以,您可以禁用ansi警告,您的插入查询将起作用。但我更愿意发出警告,但在应用端进行数据验证/截断。