从SQL查询创建表

时间:2011-11-17 10:46:47

标签: sql sql-server-2008 select sql-update

这是一个恼人的问题,我无法弄清楚如何解决它。我正在使用Microsoft SQL Server 2008。

所以我有两个表,我需要更新它们。他们共用一个共同的密钥,比如id。我想用一些内容更新Table1,然后更新Table2中分别修改过的Table1行。

问题是我不太清楚哪些行被修改了,因为我随机选择了ORDER BY NEWID(),所以我可能无法在JOIN上使用Table2办法。我正在尝试保存在Table1的查询中修改的必要详细信息,并将它们传递给Table2

这就是我要做的事情

CREATE TABLE IDS (id int not null, secondid int)

SELECT [Table1].[id], [Table1].[secondid]
INTO IDS
FROM
(
UPDATE [Table1]
SET [secondid]=100
FROM [Table1] t
WHERE t.[id] IN 
    (SELECT TOP 100 PERCENT t.[id] FROM [Table1]
        WHERE (SOME_CONDITION)
        ORDER BY NEWID()
    ) 
)

UPDATE [Table2]
SET some_column=i.secondid
FROM [Table2] JOIN IDS i ON i.id = [Table2].[id]

但是我得到了

  

关键字'UPDATE'附近的语法不正确。

所以问题是:如何解决语法错误或者这是一种更好的方法呢?

注意:第一个FROM的括号之间的查询在此新要求之前运行良好,因此我怀疑那里存在问题。或者也许?

编辑:将第二个UPDATE更改为skk建议仍会导致相同的错误(正好在包含UPDATE的以下行中):

UPDATE [Table2]
SET some_column=i.secondid
FROM [Task] JOIN IDS i on i.[id]=[Table2].[id]
WHERE i.id=some_value

3 个答案:

答案 0 :(得分:3)

SQL Server没有手动创建新表,而是使用OUTPUT子句来帮助解决这个问题。

答案 1 :(得分:1)

更新语法如下

    UPDATE TableName SET ColumnName = Value WHERE {Condition}

但你也使用了FROM关键字。

编辑:

您可以更改以下代码,然后重试

UPDATE [Table2]  SET some_column=IDS.secondid WHERE  IDS.[id] = [Table2].[id] and 
IDS.id=some_value  

答案 2 :(得分:1)

它抱怨,因为你没有在UPDATE [Table2]之前的第一个查询中使用的派生表别名。

如果添加别名,则会收到其他错误:

  

嵌套的INSERT,UPDATE,DELETE或MERGE语句必须具有OUTPUT子句。

这导致回到@Adam Wenger的回答。


我不确定我完全理解你要做什么,但是会执行以下sql(在替换SOME_CONDITION之后):

CREATE TABLE IDS (id int not null, secondid int)

UPDATE t SET [secondid] = 100
OUTPUT inserted.[id], inserted.[secondid] into [IDS]
FROM [Table1] t
WHERE t.[Id] IN
    (
        SELECT TOP 100 PERCENT t.[id] from [Table1]
        WHERE (SOME_CONDITION)
        ORDER BY NEWID()
    )

UPDATE [Table2]
SET some_column = i.secondid
FROM [Table2] JOIN IDS i ON i.id = [Table2].[id]