Создание таблицы из SQL-запроса

Это одна неприятная проблема, и я не могу понять, как ее решить. Я использую Microsoft SQL Server 2008.

Итак, у меня есть две таблицы, и мне нужно обновить их оба. У них общий ключ, например id. Я хочу обновить Table1 некоторыми материалами, а затем обновить строки Table2 которые были соответственно изменены в Table1 .

Проблема в том, что я не совсем знаю, какие строки были изменены, потому что я произвольно ORDER BY NEWID() их с помощью 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] 

Но я получаю

Неверный синтаксис рядом с ключевым словом «ОБНОВЛЕНИЕ».

Поэтому возникает вопрос: как я могу решить синтаксическую ошибку или это лучший способ сделать это?

Примечание: запрос, заключенный между круглыми скобками первого FROM хорошо работал перед этим новым требованием, поэтому я сомневаюсь, что там есть проблема. Или, может быть?

EDIT : изменение второго 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 

Он жалуется, потому что вы не сглаживаете производную таблицу, используемую в первом запросе, непосредственно перед 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] 

Вместо того, чтобы вручную создавать новую таблицу, SQL-сервер имеет предложение OUTPUT , чтобы помочь с этим

Синтаксис обновления следующий.

  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