我在SQL Server CE数据库中尝试了这段SQL,但它没有用:
INSERT INTO [ClientProperties] ([ClientId], [ProviderName], [ObjectName], [PropertyKey],
[PropertyValue], [TickCount])
VALUES ('164C3267-9D09-48F0-B6BB-2A031F7661D4', 'Foo', 'Bar', 'Baz', 'Qux', (SELECT COALESCE(MAX(TickCount), 0) + 1 FROM ClientProperties))
它返回以下消息:
解析查询时出错。 [令牌行号= 3,令牌行偏移= 75,令牌错误=选择]
因此,如果我不能这样做,即使多个进程同时尝试插入或更新行,我如何确保TickCount
保持唯一并递增?
答案 0 :(得分:2)
在insert语句中使用select时的正确语法是
INSERT INTO [ClientProperties] ([ClientId], [ProviderName], [ObjectName], [PropertyKey], [PropertyValue], [TickCount])
SELECT '164C3267-9D09-48F0-B6BB-2A031F7661D4',
'Foo',
'Bar',
'Baz',
'Qux',
COALESCE(MAX(TickCount), 0) + 1
FROM ClientProperties
答案 1 :(得分:1)
使用INSERT
构建
INSERT INTO .. SELECT FROM
查询更改为如下所示
INSERT INTO [ClientProperties] (
[ClientId],
[ProviderName],
[ObjectName],
[PropertyKey],
[PropertyValue],
[TickCount])
SELECT '164C3267-9D09-48F0-B6BB-2A031F7661D4',
'Foo',
'Bar',
'Baz',
'Qux',
COALESCE(MAX(TickCount), 0) + 1
FROM ClientProperties