【问题标题】:Update value in Multiple Tables Sql Server更新多个表 Sql Server 中的值
【发布时间】:2014-07-20 11:38:38
【问题描述】:

我的数据库中有大约 50 个表。在所有有userid 列的表中(并非所有表都包含此列),我需要将它的值从“User1”更改为“User2”。这个查询会随着“User1”和“User2”的值改变而被多次重复使用

【问题讨论】:

  • ON UPDATE CASCADE 是否适用于您的情况? This question 是关于何时可以使用或不能使用(以防您需要更多信息)。
  • ON UPDATE CASCADE 在这种情况下不适用。并感谢您的链接。

标签: sql-server sql-update multiple-tables information-schema


【解决方案1】:

可能创建一个存储过程来做同样的事情

create procedure sp_update_table(@tbl_name varchar(30))
as
begin
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = N'UPDATE ' + QUOTENAME(@tbl_name ) + 
'SET userid='User2' WHERE userid='User1''
EXEC sp_executesql @sql
end

然后只需调用你的过程,就像你想传递表名一样多次

exec sp_update_table('mytable')

编辑:

您可以从INFORMATION_SCHEMA.COLUMNS 中轻松找到包含userid 列的所有表,如下所示

Use [DatabaseName]
Select table_name From INFORMATION_SCHEMA.COLUMNS Where column_name = 'userid'

【讨论】:

  • 感谢 procudere Rahul,但查询首先需要找到包含包含 userid 列的表的表
【解决方案2】:

编写 50 条更新语句:

UPDATE <TABLE NAME> 
SET userid='User2' 
WHERE userid='User1'

在简单的文本编辑器中生成这些内容然后粘贴到 SQL Server Management Studio 中应该很容易。

【讨论】:

  • 不是这样的,我给出的user1和user2只是作为例子。该语句将被多次使用,并且 user1 和 user2 的值将发生变化。此外,所有表格都不包含该列。查询需要检查哪些列具有该字段,然后相应地更新
  • @Ram -- 那你为什么没有在你的问题中全部说出来?我只是按原样回答了这个问题;我们无法读心。
  • 我已经在问题中提到“在所有有用户 ID 列的表中”
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 2020-12-26
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多