【问题标题】:UPDATE table1 FROM table2 (using Sql Server Compact)UPDATE table1 FROM table2(使用 Sql Server Compact)
【发布时间】:2015-08-21 13:37:31
【问题描述】:

我想从[From] 表中的行更新[To] 表中的行,其中键相等。所以这就是我要做的:

UPDATE [To]
SET    [To].[Name]      = [From].[Name],
       [To].[Size]      = [From].[Size],
       [To].[Something] = [From].[Something]
FROM   [From]
WHERE  [To].[Id] = [From].[Id];
go

问题是,CE doesn't support FROM in the UPDATE command

那么,如何更改此语法以在 CE 中工作?

【问题讨论】:

  • @TTeeple 不,这不是一个骗局,因为该答案不起作用,它与 Abhishek 的答案相同,但不起作用。
  • 没用过 CE,但你能不能把它变成两个语句,一个 SELECT 到变量并在 UPDATE 中使用?
  • @MattAllwood 也许我不知道。我希望我可以一步完成,因为我需要在 EF 迁移Sql() 调用中执行此操作。两个步骤将引入另一个问题。

标签: sql sql-server sql-server-ce sql-server-ce-4


【解决方案1】:

试试下面的sn-p(未测试)-

UPDATE [To]
SET    [To].[Name]      = [From].[Name],
       [To].[Size]      = [From].[Size],
       [To].[Something] = [From].[Something]
WHERE EXISTS (SELECT 1 FROM [FROM] WHERE [To].[Id] = [From].[Id])

【讨论】:

  • 不,它说The column name is not valid. [ Node name (if any) = From,Column name = Name ]
  • UPDATE需要为来自[FROM][TO]UPDATE时,这似乎不能在单个查询中完成>。根据建议,需要将值存储在某个变量中,然后使用该变量进行更新。
  • 你会怎么做?
  • @hbob - CE 的限制迫使您分两步进行更新,要么选择存储两个表之间匹配的值,然后进行简单更新,要么首先根据加入条件,然后做一个新的插入。问题是我没有任何方便的 CE 系统可以测试并让您知道,所以我的所有解决方案可能看起来都含糊不清。
【解决方案2】:

更新到 设置为.fld1 = from1.fld1 从表 1 到内连接表 from1 on to.id = from1.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2014-06-17
    • 2018-12-04
    相关资源
    最近更新 更多