我不明白为什么我不能插入这个。我无法发现问题所在。错误消息是从字符串转换为唯一标识符时转换失败。
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。