我有一个简单的数据库,有大约20个不同的表。
我想在名称为“报告日期”的每个表中添加一列,并为其指定mm-yyyy
值。
我可以使用此查询在一个表格中执行此操作:
USE [RSA]
GO
ALTER TABLE [dbo].[RSA_BIRMINGHAM_1941$]
ADD [month] nvarchar(255);
但如果我能一次改变它们会更容易。
答案 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