我的表格如下:
CREATE TABLE MyTable
(
TableID INT IDENTITY NOT NULL,
ForeignID INT NOT NULL,
Value sql_variant NOT NULL,
CodeOne VARCHAR(4) NOT NULL,
CodeTwo VARCHAR(4) NOT NULL
)
我尝试使用以下代码进行插入:
INSERT INTO MyTable(ForeignID, Value, CodeOne, CodeTwo)
VALUES
(
1,
'FooBar',
'Foo',
'Bar'
)
当我尝试执行上面的代码时,我在SQL Server Mgmt studio中收到以下错误:
Conversion failed when converting the varchar value 'FooBar' to data type int.
它可能试图转换FooBar'的唯一原因。如果它认为1是主键并且' FooBar'处于ForeignID的位置。我对INSERT INTO ... VALUES的理解是,您不需要提供主键,因为它应该是自动生成的。如果我错了,请纠正我。
关于为什么&FooBar'正在转换为int?谢谢!
我正在使用SQL Server 2012
版本信息: Microsoft SQL Server Management Studio 11.0.2100.60 Microsoft Analysis Services客户端工具11.0.2100.60 Microsoft数据访问组件(MDAC)6.1.7601.17514 Microsoft MSXML 3.0 4.0 5.0 6.0 Microsoft Internet Explorer 9.11.9600.16384 Microsoft .NET Framework 4.0.30319.18444 操作系统6.1.7601
答案 0 :(得分:2)
问题在于没有从varchar
(您的文字)到sql_variant
的隐式转换。只需添加一个显式转换即可完成:
cast('FooBar' as sql_variant)
答案 1 :(得分:1)
我认为这不是因为列上的主键约束。这里需要注意的一件重要事情是,默认情况下,primary不能是标识列。失败的原因可能是因为value列的sql_variant声明。它不支持varchar数据类型。 https://msdn.microsoft.com/en-IN/library/ms173829.aspx。请尝试将主列作为标识列,将值列作为varchar或nvarchar列(基于方案)并再次尝试插入语句。