Создать таблицу из запроса SQL - PullRequest
0 голосов
/ 17 ноября 2011

Это одна раздражающая проблема, и я не могу понять, как ее решить.Я использую 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]

Но я получаю

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

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

Примечание: запрос, заключенный в круглые скобки первого 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

Ответы [ 3 ]

3 голосов
/ 17 ноября 2011

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

1 голос
/ 17 ноября 2011

Жалуется, потому что вы не навязываете производную таблицу, использованную в первом запросе, непосредственно перед UPDATE [Table2].

Если вы добавите псевдоним, вы получите другую ошибку:

Вложенные операторы INSERT, UPDATE, DELETE или MERGE должны содержать предложение OUTPUT.

Что приводит к ответу @ Адама Венгера.


Не уверен, что я полностью понимаю, что вы пытаетесь сделать, но будет выполнен следующий 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]
1 голос
/ 17 ноября 2011

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

    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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...