SQL Server Compact 4中的两个INNER JOINed表的UPDATE

Has*_*anG 3 sql t-sql sql-server-ce sql-server-ce-4

我正在尝试更新sql server compact edition 4.0中两个表之间的值.我的sql如下:

UPDATE ei SET ei.EstateID=e.EstateID FROM EstateImages ei
    INNER JOIN Estates e ON e.TempKey=ei.TempKey
Run Code Online (Sandbox Code Playgroud)

还试过这个:

UPDATE EstateImages SET EstateID = 
    (SELECT EstateID FROM Estates WHERE TempKey = EstateImages.TempKey)
Run Code Online (Sandbox Code Playgroud)

我有错误:

There was an error parsing the query.
[ Token line number = 1, Token line offset = 37, Token error = SELECT ]
Run Code Online (Sandbox Code Playgroud)

Mat*_*lie 6

如果您查看联机丛书或其他参考,您将发现在SQL Server CE中无法执行此操作.
- No FROM子句
- 没有相关的子查询

基本上,UPDATE语句可以引用的唯一数据是正在更新的行中的数据.

我发现只有两种方法可以解决这个问题:
1.客户端应用运行一个选择,然后触发一个或多个直接更新
2.插入新值,然后删除旧值

第一个是CE(据我所知)打算如何工作.例如,没有T-SQL,因此需要在应用程序中嵌入IF块和其他过程逻辑,而不是SQL.

第二个模仿UPDATE在触发器中的样子; 删除和插入.如果您重新构建数据以使其成为可能,那么它非常有效.

两者都不是"伟大的",但CE真的意味着"你可以逃脱的最少".它几乎就像是一个稍微浮华的持久性引擎(以funk灵活格式保存到磁盘),而不是真正的数据库引擎.

一旦你习惯了它的局限性,以及解决它们的方法,它就会非常有用.对于特定任务.