2011-01-25 69 views
3

我正在使用SQL Server。我想將一個名爲[DateCreated]的列添加到多個表中。是否有可能通過單個語句將此列添加到數據庫中的所有表中?是否可以同時將列添加到多個表中?

我偶然發現了Joe Steffaneli的一個答案,他在這個答案中提出了一個查詢,該查詢又返回包含Alter table語句的行。 查詢如下:

select 'alter table ' + quotename(s.name) + '.' + quotename(t.name) + ' add [DateModified] datetime' 
    from sys.columns c 
     inner join sys.tables t 
      on c.object_id = t.object_id 
     inner join sys.schemas s 
      on t.schema_id = s.schema_id 
     left join sys.columns c2 
      on t.object_id = c2.object_id 
       and c2.name = 'DateModified' 
    where c.name = 'DateCreated' 
     and t.type = 'U' 
     and c2.column_id is null /* DateModified column does not already exist */ 

有沒有辦法,我可以執行返回的行什麼辦法?對不起英文。

+3

國家的DBMS您使用,我們可以給你一個批處理語句來實現相同的。 – RichardTheKiwi 2011-01-25 08:39:12

+0

我正在使用SQL Server。 – Bhaskar 2011-01-25 09:04:40

回答

5

你可能需要這樣的東西。檢查腳本在運行之前是否做了你想要的(添加一個非空列,默認值爲getdate())!

DECLARE @Dynsql nvarchar(max) 
SET @Dynsql = '' 

SELECT @Dynsql = @Dynsql + ' 
alter table ' + QUOTENAME(SCHEMA_NAME(schema_id))+ '.' + QUOTENAME(name) + 
' add [DateCreated] datetime not null default getdate()' 
FROM sys.tables 
WHERE type='U' and object_id NOT IN (select object_id from sys.columns where name='DateCreated') 


EXEC (@Dynsql) 
-1

不,沒有單個語句會將列添加到數據庫中的所有表中。

下一次請使用您正在使用的RDBMS標記您的問題。如果有辦法,我們將無法在不知道您正在使用哪種數據庫系統的情況下提供命令。

1

此存儲過程工作正常

USE databaseName; 
exec sp_msforeachtable 'alter table ? Add [DateCreated] datetime not null default getdate()'; 
0
declare @i int 

set @i=1 
while(@i<45) 
begin 
    declare @sql varchar(200) 

    with TempTable as (select Row_number() over(order by stdID) as RowNo,* from SomeTable) 

    select @sql= 'alter table Table'+(select Name from TempTable where [email protected])+' add NewColumn int' 

    exec (@sql) 
    set @[email protected]+1 
end 
相關問題