更新整个数据库中所有表中的值

时间:2019-02-01 08:49:56

标签: sql sql-server sql-update

我想更新(更改)数据库中所有表中的值。

例如:

我有3张桌子

tbl_1
tbl_2
tbl_3

,我有一个在这些表中使用的字符串“ test”。 如何在所有3个表中将“测试”更改为“你好”?

4 个答案:

答案 0 :(得分:1)

您必须像下面那样更新单个表

 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'

答案 1 :(得分:0)

为了简化操作,您可以使用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',....)

答案 2 :(得分:0)

您可以通过获取和更新像这样的每个表和每个列来手动完成

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

样品:

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

否则,您可以通过循环每个列来动态地执行相同的操作。

喜欢

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

答案 3 :(得分:0)

您可以使用存储过程来更新三个表,但是所有这些表都需要一次单独更新一次:

   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