SQL Server:具有不同类型的多行插入

时间:2017-09-04 11:25:15

标签: sql-server sql-server-2014

在值中使用混合类型的表中插入多行时,我有一种奇怪的行为。

用于创建表的SQL是:

CREATE TABLE [dbo].[insert_test]
(
    [col1] [nchar](10) NULL
) ON [PRIMARY]

插入多个值(使用混合类型)时出现错误:

INSERT INTO insert_test (col1) 
VALUES ('test'), (1);

错误:

  

转换varchar值时转换失败' test'数据类型int。

我不明白,为什么服务器试图转换'测试'到一个int。

我希望,它使用我使用的列类型(在这种情况下来自ncharcol1)。

1 个答案:

答案 0 :(得分:4)

根据Table Value Constructor documentation

  

多行INSERT语句中指定的值遵循数据   UNION ALL语法的类型转换属性。这导致了   将不匹配类型隐式转换为更高类型   优先。如果转换不是受支持的隐式转换,   返回错误。

没有提及目标表类型,因为构造函数可以在除INSERT语句之外的上下文中使用。我认为记录的行为提供了不同用例之间的一致性。