2010-11-18 24 views
5

Canlı veritabanımda önceden oluşturulmuş tabloyu oluşturmak için tablo komut dosyası oluşturmak istiyorum.SQL Server'da SQL sorgusu kullanarak tablo oluşturma komut dosyası oluşturma

Masa üzerinde sağ tıklama kullanarak komut dosyaları oluşturabileceğimizi ve 'komut dosyası tablosu' menüsünü tıklatabildiğimizi biliyorum ve komut dosyası oluşturulacak. Çünkü canlı db UI'm çok yavaş çalışıyor.

SQL sorgusunu kullanarak aynı işlemi yapmak istiyorum. Herhangi bir yol var mı??

+2

Bu, peşinde olduğunuza benziyor; cevabım değil, tekerleği yeniden icat etmenin bir anlamı yok ... http://sqlblogcasts.com/blogs/madhivanan/archive/2007/08/27/generate-sql-script.aspx – nimizen

+0

@ Sınırlamaları olan @nimizen: sadece tablo ve dizinler ve kısıtlamalar oluşturmaz, bunu 'SELECT top 0 * INO klonu FROM tablosundan' ile yapabilirsiniz. –

cevap

3

Bir TSQL çözümü arıyorsanız, this example gösterileri gibi oldukça ayrıntılıdır.

Daha kısa bir alternatif SMO library (example)

kullanarak olurdu (Ben aslında bu here cevap ama SQL Server okunur Devs muhtemelen bu soruna soru başlığını ilgisi olmayan)

+0

Yanıt için teşekkürler .. –

2

kullanın bu sorgu :

DROP FUNCTION [dbo].[Get_Table_Script] 
Go 

Create Function Get_Table_Script 
(
    @vsTableName varchar(50) 
) 

Returns 
    VarChar(Max) 
With ENCRYPTION 

Begin 

Declare @ScriptCommand varchar(Max) 

Select @ScriptCommand = 
    ' Create Table [' + SO.name + '] (' + o.list + ')' 
    + 
    (
     Case 
     When TC.Constraint_Name IS NULL 
      Then '' 
     Else 'ALTER TABLE ' + SO.Name + ' ADD CONSTRAINT ' + 
      TC.Constraint_Name + ' PRIMARY KEY ' + ' (' + LEFT(j.List, Len(j.List)-1) + ')' 
     End 
    ) 
From sysobjects As SO 
    Cross Apply 

    (
     Select 
      ' [' + column_name + '] ' + 
      data_type + 
      (
       Case data_type 
        When 'sql_variant' 
         Then '' 
        When 'text' 
         Then '' 
        When 'decimal' 
         Then '(' + Cast(numeric_precision_radix As varchar) + ', ' + Cast(numeric_scale As varchar) + ') ' 
        Else Coalesce('(' + 
             Case 
              When character_maximum_length = -1 
               Then 'MAX' 
              Else Cast(character_maximum_length As VarChar) 
             End + ')' , '' 
           ) 
       End 
      ) 
      + ' ' + 
      (
       Case 
        When Exists ( 
            Select id 
            From syscolumns 
            Where 
             (object_name(id) = SO.name) 
             And 
             (name = column_name) 
             And 
             (columnproperty(id,name,'IsIdentity') = 1) 
           ) 
         Then 'IDENTITY(' + 
           Cast(ident_seed(SO.name) As varchar) + ',' + 
           Cast(ident_incr(SO.name) As varchar) + ')' 

        Else '' 

       End 
      ) + ' ' + 

      (
       Case 
        When IS_NULLABLE = 'No' 
         Then 'NOT ' 
        Else '' 
       End 
      ) + 'NULL ' + 
      (
       Case 
        When information_schema.columns.COLUMN_DEFAULT IS NOT NULL 
         Then 'DEFAULT ' + information_schema.columns.COLUMN_DEFAULT 
        ELse '' 
       End 
      ) + ', ' 
     From information_schema.columns 
     Where 
      (table_name = SO.name) 
     Order by ordinal_position 
     FOR XML PATH('')) o (list) 

     Inner Join information_schema.table_constraints As TC On (
                    (TC.Table_name = SO.Name) 
                    AND 
                    (TC.Constraint_Type = 'PRIMARY KEY') 
                    And 
                    (TC.TABLE_NAME = @vsTableName) 
                   ) 
     Cross Apply 
      (
       Select '[' + Column_Name + '], ' 
       From information_schema.key_column_usage As kcu 
       Where 
        (kcu.Constraint_Name = TC.Constraint_Name) 
       Order By ORDINAL_POSITION 
       FOR XML PATH('') 
      ) As j (list) 
Where 
    (xtype = 'U') 
    AND 
    (Name NOT IN ('dtproperties')) 

Return @ScriptCommand 

End 

Ve böyle bu Function kovabilir:

Ve endeksler, tetikleyicileri ve kısıtlamaları ile CREATE TABLE deyimi üretmek için daha eksiksiz (-ish) çözüm için tetik kullanımını bu

SELECT  
DB_NAME() AS DataBaseName,     
dbo.SysObjects.Name AS TriggerName, 
dbo.sysComments.Text AS SqlContent 
FROM 
dbo.SysObjects INNER JOIN 
    dbo.sysComments ON 
    dbo.SysObjects.ID = dbo.sysComments.ID 
WHERE 
(dbo.SysObjects.xType = 'TR') 
AND 
dbo.SysObjects.Name LIKE '<Trigger_Name>' 
+0

script dosyasının? Sınırlamalar nelerdir (harici anahtarlar, tetikleyiciler vb.)? –

+0

@clickstefan: bu soruda '@Pankaj Agarwal', başka bir cevap gönderecek tetikleyici komut dosyaları oluşturmak için tablo komut dosyası oluşturmak istiyorum. –

+0

@clickstefan: http://stackoverflow.com/questions/13200511/how-to-generate-scripts-for-all-triggers-in-database-using-microsoft-sql- adresindeki tüm triger'ları bulmak için bu bağlantıyı kullanın server –

3

oluşturmak için 10

Select [dbo].Get_Table_Script '<Your_Table_Name>' 
Lowell Izaguirre tarafından yapılan stored procedure deneyin.

burada

değişiklikler şunlardır:

Bu test edilmiş ve 2004 yılından beri geliştirilen, son güncelleme Ayrıca endeks seçeneklerini (PAD_INDEX, FILLFACTOR, IGNORE_DUP_KEY) içerecek şekilde bazı iyileştirmeler yaptık 2013

oldu , tüm kodu sığdıramazsınız, böylece http://pastebin.com/LXpBeuN1 adresindeki tam değiştirilmiş sürümü bulacaksınız.


Ben Lowell ile konuştum ve yeni bir sürüm endeks opsiyonları ve diğer iyileştirmeler için yeni değişikliklerle çevrimiçi yakında olacak Güncellemesi.

İlgili konular