从字符串转换为唯一标识符时转换失败 - 两个 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

MSDN 文档在这里

要为 M.Ali's Answer 添加一些上下文,您可以使用以下代码将字符串转换为唯一标识符

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

如果这不起作用,请检查以确保您输入了有效的 GUID

问题是 ID 列没有获得任何值。我在 Smith SQL Fiddle @Martin 上看到他用 DEFAULT newid 声明了 ID 列,而我没有。

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 ║
╚══════════════════════════════════════╩══════════════════════════════════════╩══════════════════════════════════════╩═════════════════════════╩═════════════════════════╝

今天在使用 EF Core 5 的ExecuteSqlInterpolatedAsync执行 SQL 命令时遇到了这个问题。

错误代码:contactId放置在' '

await _dbContext.Database.ExecuteSqlInterpolatedAsync($"UPDATE Contact SET Status = {(int)Status} WHERE Id = '{contactId}'");

好的代码:从contactId中删除' '就可以工作

await _dbContext.Database.ExecuteSqlInterpolatedAsync($"UPDATE Contact SET Status = {(int)Status} WHERE Id = {contactId}");

我的问题是我认为是"guid"的"guid"不是guid

http://guid.us/Test/GUID

因此,我重新检查了我输入的字符串,发现我没有有效的 guid。

还要确保在获取数据时,它应该采用正确的格式。由于数据类型是唯一标识符,因此正确的格式将是xxxx-xx-xx-xx-xxxxxx

例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 是有效的唯一标识符值。

您必须检查唯一标识符列,并且如果您给出相同的值,则必须为该特定字段提供一个差异值,它将不起作用。它强制实施密钥的唯一性。

这是代码:

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')

我对此有一个有趣的变化。 我最初认为我在插入唯一标识符字段中时遇到了问题,基于这个问题和答案。 但是,就我而言,我在插入 varchar 字段时收到此错误。 我插入的值包含一些作为唯一标识符的文本,但也包含其他文本。 看起来SQL Server试图将文本解析为唯一标识符,因为它识别出某些文本是唯一标识符。 当我第一次设置 insert 语句时,这个问题被掩盖了,因为我用 UPPER 包装了值。 我随后更改了"修复",将值转换为 varchar。

最新更新