INSERT INTO由于不正确的转换T-SQL而失败

时间:2015-06-22 11:58:35

标签: sql-server tsql

我的表格如下:

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的理解是,您不需要提供主键,因为它应该是自动生成的。如果我错了,请纠正我。

我使用此页面作为参考: http://www.databasejournal.com/features/mssql/tsql-understanding-how-to-use-the-insert-statement-to-populate-your-database-tables.html

关于为什么&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

2 个答案:

答案 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列(基于方案)并再次尝试插入语句。