在值中使用混合类型的表中插入多行时,我有一种奇怪的行为。
用于创建表的SQL是:
CREATE TABLE [dbo].[insert_test]
(
[col1] [nchar](10) NULL
) ON [PRIMARY]
插入多个值(使用混合类型)时出现错误:
INSERT INTO insert_test (col1)
VALUES ('test'), (1);
错误:
转换varchar值时转换失败' test'数据类型int。
我不明白,为什么服务器试图转换'测试'到一个int。
我希望,它使用我使用的列类型(在这种情况下来自nchar
列col1
)。
答案 0 :(得分:4)
根据Table Value Constructor documentation:
多行INSERT语句中指定的值遵循数据 UNION ALL语法的类型转换属性。这导致了 将不匹配类型隐式转换为更高类型 优先。如果转换不是受支持的隐式转换, 返回错误。
没有提及目标表类型,因为构造函数可以在除INSERT
语句之外的上下文中使用。我认为记录的行为提供了不同用例之间的一致性。