2016-03-22 32 views
1

Yaklaşık 20 farklı tablonun bulunduğu basit bir DB sahibim.Çoklu Tabloları Değiştirme SQL Server

Adı "Rapor Tarihi" olan her tabloya bir sütun eklemek ve mm-yyyy değerini vermek istiyorum.

ben bu sorguyu kullanarak her seferinde bir tablo yapabilirsiniz:

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

Ama ben hepsini tek seferde değiştirebilir eğer daha kolay olurdu.

+2

--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 [email protected] 
dize ve onu yürüt. Muhtemelen 20 tablo için aşırı sıkma ve 1000 tablo olsaydı, tasarımınızı ilk defa almak dahil db'nizle başa çıkmak için başka birçok stratejiye ihtiyacınız olurdu. Benim amacım, en iyi çalışan çözümü kullanmaktı - bu durumda kes/kopyala/yapıştır :-) –

+0

@RaulGonzales 'sys.tables', sizin için tablo tanımını değiştiren dinamik sorgu oluşturmak için kullanabilirsiniz. Dikkat edilmesi gereken önemli nokta, tablolarda veri varsa, yeni sütunu NULLable olarak oluşturmanız gerekir. Cevabımı gör – DhruvJoshi

cevap

0

Bu dinamik sorgu

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 [email protected] 

SET @[email protected] 
--PRINT(@q) 
EXEC(@q) 
END 

Açıklama kullanabilirsiniz: Hepimiz tabloları değiştirilmesi gerekebilir arasında bize ismini sağlar sys.tables tablosunu kullanın.

ad ardından 'Rapor tarihi' ile başlar iki yerde

değiştirebileceği gereken tek tablolar gibi herhangi bir iş kuralı varsa Sen sysobjects tablo isimleri çekin ve dinamik sql birikebilir