2010-12-28 24 views
7

SQL Server'da (2008) bir veritabanındaki tüm dizinlerin, anahtarların ve yabancı anahtarların ayrıntılarını almak istiyorum. Bunu nasıl yaparım?SQL Server'da dizinler, anahtarlar ve yabancı anahtarlar nasıl komut verilir

Ben biraz benzer veritabanlarının birkaç genelinde bu özellikleri eşitlemek için bunu kullanmayı planlıyoruz.

Ben SQL Server Management Studio'yu kullanabilirsiniz, ancak ben çünkü web barındırma tarafından belirlenen kısıtlamalar veritabanının tam bir yedekleme yapamaz.

-

cevap gerekmez

İkincil soru:

Neden orada sadece metin SQL komut veritabanı yapının tüm listeler Mysql veritabanı şemaya benzer bir şey olamaz biçim?

+0

Bunu bir komut dosyasından yapmak istiyorum. Mysql'de her tablo için "tablo örneği oluşturabilirim" ifadesini kullanırdım. – tomsv

cevap

6

Eğer en az SQL Server 2005 veya yukarıda kullandığınız varsayarsak, bu sadece şema, veri veya her ikisi için komut dosyaları oluşturmak için kullanılabilecek

komut şema için Database Publishing Wizard kullanabilirsiniz. Eğer VS2008 kullanıyorsanız

O Visual Studio 2005 ve/veya Visual Web Developer 2005

doğrudan entegre SQL Yayıncılık Sihirbazı v1.2 sürümü önceden yüklenmiş olarak gelir. Nereden çağırmak için here adresini kontrol edebilirsiniz.

+0

+1, bu gerçekten harika. Skripterstellung für Objekte (Fehler) Meldungen Operasyon nedeniyle geçerli değil - Skripterstellung wird zusammengestellt (Erfolg) Liste der Objekte für die - Durum der Datenbankveröffentlichung : Ben şema yayımlamak çalıştığınızda –

+0

ben bundan bir hata alıyorum nesnenin mevcut durumu. (SqlPubWiz) - Skript wird auf den Datenträger geschrieben (Beendet) (Almanca hata mesajları için özür dilerim) – tomsv

+0

komut satırından mı, VS üzerinden mi çalıştırıyorsunuz? – InSane

1

InSane'in mükemmel yanıtına bir alternatif olarak, bir metin dosyasına veya penceresine komut vermek için SSMS'deki herhangi bir nesneyi sağ tıklayabilirsiniz.
Bazı ücretsiz ve özgür olmayan ürünler de WinSQL dahil olmak üzere bunu sağlar.

2

sonra sadece xp_cmdshell kullanarak T-SQL komut dosyası almak gerekiyorsa.

DECLARE @OUTPUT TABLE (line nvarchar(max)) 
DECLARE @cmd VARCHAR(8000), @ps VARCHAR(8000), @psLoadAssemblies VARCHAR(8000), @script nvarchar(max) ='' 
DECLARE @srv nvarchar(max)='<server name>', 
     @ln nvarchar(max)='<login>', 
     @pw nvarchar(max)='<password>', 
     @db nvarchar(max) = '<database>', 
     @schemaName nvarchar(max) = '<schema>', -- without '[' ']' 
     @viewName nvarchar(max) = '<view name>', -- without '[' ']' 
     @indexName nvarchar(max) = '<index name>' -- without '[' ']' 

SET @psLoadAssemblies = '[System.Reflection.Assembly]::LoadWithPartialName(''Microsoft.SqlServer.SMO'')|Out-Null;' 
SET @ps='$using=''Microsoft.SqlServer.Management.Smo'';$s=new-object($using+''.Server'') $srv;$c = $s.ConnectionContext;$c.LoginSecure=$false;$c.Login=$ln;$c.Password=$pw; Write-Host ($s.Databases[$db].Views.Item($viewName,$schemaName).Indexes[$indexName].Script())' 
SET @ps=REPLACE(@ps,'$srv',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$ln',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$pw',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$db',''''[email protected]+'''') 

SET @ps=REPLACE(@ps,'$schemaName',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$viewName',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$indexName',''''[email protected]+'''') 

SET @cmd = 'powershell -Command "'[email protected][email protected]+'"' 
exec dev.Msg @cmd 
INSERT INTO @OUTPUT 
exec xp_cmdshell @cmd 

SELECT @script+line FROM @OUTPUT 
WHERE line is not null 

PRINT @script 

Dip not: SMO ve powershell (sonuç @script değişkende, sen Sp_executesql ile yürütebilir) ile somut olarak görünümün somut olarak endeksini scripting Örneğin Neden böyle hilelere ihtiyaç duyabileceğimizi soranlar için: bazı senaryolarda, ör. "üçüncü taraf aracını kullanarak verileri içe aktar", "bırak-yeniden oluştur" yaklaşımı, "etkinleştir-devre dışı bırak" nesnelerinden daha iyi çalışır; Bu tür üçüncü parti aracı "kırpmak" diyebileceğinden ve tablonuz şemaya bağlı görünüme katılırsa, üçüncü taraf bir araç hatası alırsınız (indeksli görünümlere katılan kısaltma masası bir hata atar, bu nedenle görünümü tüm dizinler ile birlikte bırakmak zorunda kalırız ithalattan önce ve sonra yeniden oluşturun).

0

"dontomoso" kullanıcısının yorumunu veya cevabını gördüm. İngilizce'ye çevrildikten sonra "Veritabanı yayımlama sihirbazında" (SqlPubWiz) "nesnesinin geçerli durumu nedeniyle işlem geçerli değil gibi görünüyor."

Bu uygulamada çok fazla denemeler ve denemelerden sonra. veritabanı adı büyük/küçük harfe duyarlıdır. -d parametresi için doğru durum değerini girin.Çözüm basittir, varsayılan şema adını veya "DB oluştururken kullanılır" ile aynı olan İlk Katalog adını değiştirin. Örneğin. PlayGround kullanıldığında oluştururken, burada da playGround kullanın ... Oyun alanı veya oyun alanı veya PlayGround bu hatayı üretecektir.

Umarım bu yardım!

İlgili konular