改变多个表SQL Server

时间:2016-03-22 09:18:50

标签: sql sql-server tsql

我有一个简单的数据库,有大约20个不同的表。

我想在名称为“报告日期”的每个表中添加一列,并为其指定mm-yyyy值。

我可以使用此查询在一个表格中执行此操作:

USE [RSA]
GO
ALTER TABLE [dbo].[RSA_BIRMINGHAM_1941$]
ADD [month] nvarchar(255);

但如果我能一次改变它们会更容易。

1 个答案:

答案 0 :(得分:0)

您可以使用此动态查询

DECLARE @q nvarchar(max)
DECLARE @c int
SELECT @c=count(1) from sys.tables where type='U' -- add any other where condition here
WHILE (@c>0)
BEGIN
select @q =
          'ALTER TABLE ['+ 
          t.name +
          '] ADD [month] nvarchar(255) NULL; '
          FROM (
               SELECT 
                name, 
                ROW_NUMBER() OVER(ORDER BY name ASC) as r 
               FROM sys.tables 
               where type='U'
               ) t  where t.r=@c

SET @c=@c-1
--PRINT(@q)
EXEC(@q)
END

<强>说明: 我们使用sys.tables表,它为我们提供了所有需要更改的表的名称。

如果您有任何业务规则,例如只有名称以&#39;报告日期&#39;那么你需要在两个地方修改

--here
SELECT @c=count(1) from sys.tables where type='U' and name like 'Report Date%'
--...
--...
-- and here
        FROM (
               SELECT 
                name, 
                ROW_NUMBER() OVER(ORDER BY name ASC) as r 
               FROM sys.tables 
               where type='U' and name like 'Report Date%'
               ) t  where t.r=@c