在SQL Server Compact Edition中插入/更新唯一数值

时间:2014-09-19 16:22:44

标签: sql sql-server-ce

我在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保持唯一并递增?

2 个答案:

答案 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