обновить атрибуты записи в нескольких таблицах - PullRequest
0 голосов
/ 03 мая 2011

Мне нужно обновить отдельные экземпляры в разных таблицах атрибута [ISD_ID], как мне это сделать?

Я могу получить набор таблиц, которые содержат записи, которые я ищу, с помощью этого оператора:

SELECT c1.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c1
INNER JOIN information_schema.COLUMNS c2
ON c1.TABLE_NAME = c2.TABLE_NAME
 WHERE c1.COLUMN_NAME LIKE '%isd%id%' and c2.column_name LIKE '%schooldistrict%id%'

Итак, теперь у меня есть набор имен таблиц, которые я хотел бы перебирать, обновляя записи по мере необходимости.

Согласно предложению в другом посте, я прочитална динамический SQL.Таким образом, я мог бы сделать что-то вроде EXECUTE IMMEDIATE: ('update' + @tablename + ' set ISD_ID=37 where SchoolDistrictID=46').

Тогда мой вопрос таков: как я могу перебирать имена своих таблиц и подставлять их в вышеприведенный оператор как переменную @tablename, чтобы я мог обновитьзначения в каждой таблице?

У меня также есть возможность использовать .NET и SSIS при необходимости.

Заранее спасибо;Я не очень хорошо разбираюсь в SQL и ценю возможность учиться.

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Если вы хотите использовать для этого SSIS, вы можете перенести результат из вашего первого запроса в пункт назначения RecordSet.

Затем можно выполнить цикл foreach для переменной, в которой хранится набор записей, а затем, например, создать задачу SQL с выражением, которое делает ваш "UPDATE " + (DT_STR,255,1252)@[User::tblname] + " SET ....." как sqlStatementSource.

0 голосов
/ 03 мая 2011
  • Странный путь Вы можете использовать недокументированную хранимую процедуру (пожалуйста, не говорите Ремусу Русану, что я это сказал), чтобы сделать что-то вроде . Вы бы использовали условие @where, чтобы указать, что таблица должна содержать данный столбец.

  • Более обычным способом было бы

    1. выделить результаты запроса во временную таблицу или табличную переменную
    2. перебрать временную переменную table / table, используя цикл while, захватывая имя таблицы и подставляя в переменную @tablename
    3. Выполните ваш запрос выше. Предупреждение, вы, вероятно, захотите создать переменную с именем что-то вроде @myDynamicSQL, установить для нее текст оператора и затем вызвать EXEC IMMEDIATE.

Честно говоря, к тому времени, когда вы закончите со "странным способом", вам будет лучше сделать это обычным способом, но я просто пытаюсь быть тщательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...