在SQL Server中将唯一标识符外键插入表中

时间:2011-09-28 00:40:40

标签: sql sql-server

我正在尝试使用这样的语句插入虚拟搜索数据(每个值的值不同):

insert into SEARCHRESULTEXTENSIONBASE
    (CAL_ISBN, CAL_SEARCHRESULTID, USAGEDATAIMPORTID)
    VALUES('9780347011266', '1317168818', '925e3a5e-e971-11e0-9425-00219b71cde3')

但是我收到了这个错误:

[SQL Server] Conversion failed when converting from a character string
             to uniqueidentifier.

字段USAGEDATAIMORTID是一个uniqueidentifier字段,我在另一个成功接受数据的表中使用类似的语句:

INSERT INTO IMPORTUNIVERSITY
    (USAGEDATAIMPORTID, PAGENUMBERS, PUBLISHERNAME, RECORDID, DEPARTMENTNAME) 
    VALUES('925e3a5e-e971-11e0-9425-00219b71cde3', '2',
            'Nationwide News Pty Limited',
             '74', 'Business');

我能看到的唯一区别是SEARCHRESULTEXTENSIONBASEUSAGEDATAIMPORTIDIMPORTUNIVERSITY表的外键。

有什么想法吗?

修改

insert into SEARCHRESULTEXTENSIONBASE
            (CAL_ISBN, CAL_SEARCHRESULTID, USAGEDATAIMPORTID)
            VALUES('06463322521', '1317173481', convert(uniqueidentifier,'925e3a5e-e971-11e0-9425-00219b71cde3'))

给了我同样的错误。

4 个答案:

答案 0 :(得分:0)

试试这个:

insert into SEARCHRESULTEXTENSIONBASE             
(CAL_ISBN, CAL_SEARCHRESULTID, USAGEDATAIMPORTID)             
VALUES('9780347011266', '1317168818', 
convert(uniqueidentifier, 'b6c51461-e966-11e0-b87a-0219b71cde3'))

您需要将字符串转换为uniqueidentifier数据类型。

答案 1 :(得分:0)

您使用的GUID中只有一个数字。可能是复制粘贴错误。

b6c51461-e966-11e0-b87a-0219b71cde3 - has 31 digits
F567D3BC-45E9-4891-A0FB-BDE143236867 - should have 32 digits (correct)

您可以将其测试为

SELECT Cast('b6c51461-e966-11e0-b87a-0219b71cde3' as UniqueIdentifier)

引发

Conversion failed when converting from a character string to uniqueidentifier.

,而

SELECT Cast('F567D3BC-45E9-4891-A0FB-BDE143236867' as UniqueIdentifier)

工作正常。

答案 2 :(得分:0)

看起来CAL_ISBN或CAL_SEARCHRESULTID是uniqueidentifier,您尝试插入字符串。您能否提供您要插入的表的架构定义并收到错误。

答案 3 :(得分:0)

问题是由于两个表中没有匹配的UUID,因此外键关系失败。如果错误消息没有那么误导,那么会更容易解决。

感谢您的帮助!