2014-01-05 87 views
14

我不明白为什么我不能插入这个。我无法发现问题。错误消息是 从字符串转换为uniqueidentifier时转换失败。从字符串转换为uniqueidentifier时转换失败 - 两个GUID

GUID是我从其他表中做出选择时得到的GUID。

insert into [db].[dbo].[table] (myid,friendid,time1,time2) values 
(CONVERT(uniqueidentifier,'0C6A36BA-10E4-438F-BA86-0D5B68A2BB15'), 
    CONVERT(uniqueidentifier,'DF215E10-8BD4-4401-B2DC-99BB03135F2E'), 
'2014-01-05 02:04:41.953','2014-01-05 12:04:41.953') 

我使用SQL Server 2012

列是

id  uniqueidentifier, 
myid  uniqueidentifier, 
friendid uniqueidentifier, 
time1  datetime nullable, 
time2  datetime nullable 
+0

表上的任何触发器?什么是列数据类型?那些GUID很好。 –

+0

没有触发器。类型在帖子里,我更新了 –

+0

没有repro。 [SQL Fiddle](http://sqlfiddle.com/#!6/a2361/1)请仔细检查表结构。你有没有不小心做了一个'uniqueidentifier'的时间栏? –

回答

15

的问题是ID列没有得到任何价值。我在@马丁·史密斯SQL小提琴看到他与DEFAULT newid声明的ID列,我没有..

6
DECLARE @t TABLE (ID UNIQUEIDENTIFIER DEFAULT NEWID(),myid UNIQUEIDENTIFIER 
       , friendid UNIQUEIDENTIFIER, time1 Datetime, time2 Datetime) 
insert into @t (myid,friendid,time1,time2) 
values 
(CONVERT(uniqueidentifier,'0C6A36BA-10E4-438F-BA86-0D5B68A2BB15'), 
    CONVERT(uniqueidentifier,'DF215E10-8BD4-4401-B2DC-99BB03135F2E'), 
    '2014-01-05 02:04:41.953','2014-01-05 12:04:41.953') 

SELECT * FROM @t 

结果集随着出任何错误

╔══════════════════════════════════════╦══════════════════════════════════════╦══════════════════════════════════════╦═════════════════════════╦═════════════════════════╗ 
║     ID     ║     myid     ║    friendid    ║   time1   ║   time2   ║ 
╠══════════════════════════════════════╬══════════════════════════════════════╬══════════════════════════════════════╬═════════════════════════╬═════════════════════════╣ 
║ CF628202-33F3-49CF-8828-CB2D93C69675 ║ 0C6A36BA-10E4-438F-BA86-0D5B68A2BB15 ║ DF215E10-8BD4-4401-B2DC-99BB03135F2E ║ 2014-01-05 02:04:41.953 ║ 2014-01-05 12:04:41.953 ║ 
╚══════════════════════════════════════╩══════════════════════════════════════╩══════════════════════════════════════╩═════════════════════════╩═════════════════════════╝ 
+13

答案的解释可能会有所帮助... – gdoron

+0

已下调。 @gdoron是对的。 –

0

你必须检查独特标识符列,并且如果给出相同的值,则必须为该特定字段提供diff值,否则该字段无效。它强制执行密钥的唯一性。

下面是代码:

Insert into production.product 
(Name,ProductNumber,MakeFlag,FinishedGoodsFlag,Color,SafetyStockLevel,ReorderPoint,StandardCost,ListPrice,Size 
,SizeUnitMeasureCode,WeightUnitMeasureCode,Weight,DaysToManufacture, 
    ProductLine, 
    Class, 
    Style , 
    ProductSubcategoryID 
    ,ProductModelID 
    ,SellStartDate 
,SellEndDate 
    ,DiscontinuedDate 
    ,rowguid 
    ,ModifiedDate 
) 
    values ('LL lemon' ,'BC-1234',0,0,'blue',400,960,0.00,100.00,Null,Null,Null,null,1,null,null,null,null,null,'1998-06-01 00:00:00.000',null,null,'C4244F0C-ABCE-451B-A895-83C0E6D1F468','2004-03-11 10:01:36.827') 
+1

发布答案时,请尝试使用代码的格式选项;-) – Fabien

1

MSDN文档Here

要有点背景的增加M.Ali's Answer您可以用下面的代码

SELECT CONVERT(uniqueidentifier,'DF215E10-8BD4-4401-B2DC-99BB03135F2E') 

字符串转换为唯一标识符如果这不起作用,请检查以确保您输入了有效的GUID

相关问题