Обновить значение во всех таблицах во всей базе данных - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу обновить (изменить) значение во всех таблицах в базе данных.

Например:

У меня есть 3 таблицы

tbl_1
tbl_2
tbl_3

, и у меня естьстрока «test», используемая в этих таблицах.Как я могу изменить "тест" на "привет" во всех 3 таблицах?

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Вы можете использовать хранимую процедуру, чтобы обновить три таблицы, но все они должны обновляться индивидуально по одному:

   Create Proc Test(@Value Type)
   As
   Begin
      Update dbo.TableName1
      Set ColumnName = @Value Where ColumnName = 'Test'

      Update dbo.TableName2
      Set ColumnName = @Value  Where ColumnName = 'Test'

      Update dbo.TableName2
      Set ColumnName = @Value  Where ColumnName = 'Test'
   End
0 голосов
/ 01 февраля 2019

Чтобы сделать это проще, вы можете сгенерировать «обновленный оператор», используя information_schema.tables следующим образом

select 'update '+table_name+' a set col=''hello'' where a.col=''test'';'
  from information_schema.tables
where table_name in ('tbl_1','tbl_2',....)
0 голосов
/ 01 февраля 2019

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

UPDATE <TableName> SET <Column Name> = <Your New Value> WHERE <Column Name> = <Old Value>

Пример:

UPDATE Table1 SET COl1 = 'Hello' WHERE Col1 = 'test'

В противном случае вы можете динамически сделать то же самое с помощью Looping forкаждый столбец.

Как это

DECLARE @SQL VARCHAR(MAX)
DECLARE @Min INT,@Max INT
DECLARE @ColumnList TABLE
(
    SeqNo INT IDENTITY(1,1),
    TableName VARCHAR(500),
    ColumnName VARCHAR(500)
)

INSERT INTO @ColumnList
(
    TableName,
    ColumnName
)
SELECT
    TABLE_NAME,
    COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
        WHERE DATA_TYPE = 'varchar'

SELECT
    @Min = MIN(SeqNo),
    @Max = MAX(SeqNo)
    FROM @ColumnList

WHILE ISNULL(@MIn,0)<=ISNULL(@Max,0)
BEGIN

    SELECT
        @SQL = 'UPDATE ['+LTRIM(RTRIM(TableName))+'] 
                    SET ['+LTRIM(RTRIM(TableName))+'] = ''Hello''
                    WHERE ['+LTRIM(RTRIM(TableName))+'] = ''Test''
                    GO'
        FROM @ColumnList
            WHERE SeqNo = @Min

    EXEC(@SQL)

    SELECT
        @Min = ISNULL(@Min,0)+1

END
0 голосов
/ 01 февраля 2019

Вы должны обновить отдельную таблицу, как показано ниже

 update tbl_1 
     set col='hello'
    where tbl_1.col='test';

go

update tbl_1 
 set col='hello'
where tbl_1.col='test';
go
update tbl_1 
 set col='hello'
where tbl_1.col='test'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...