2009-04-01 8 views
8

私は長いSPのリスト(ストアドプロシージャ)とSQLサーバdbの関数を持っています。右クリックしてXXXを変更するスクリプトを作成することで、1つずつ保存することができました。 TSQLにすべてのSPをクエリする方法がありますか?関数がxxx.sqlファイルに保存しますか?SQL SPと関数を簡単にバックアップできますか?

たとえば、sp_mySP1の場合、テキストファイルであるsp_mySP1.sqlに保存します。データベースが大きすぎます。私はソースコードのバックアップとしてSPと機能だけを保存したいと思います。

+0

私はXMLをファイルに保存する機能SaveToFileメソッド(XML、ファイル名)を持っています。この関数を使用してSPをxmlとしてファイルに渡すことはできますか? –

答えて

18

管理スタジオでは、データベースの検索、右クリック、タスク、スクリプトの生成、

next-next-next「オブジェクトタイプを選択する」まで。 [ストアドプロシージャ]と[ユーザ定義関数]を選択し、次に[すべて選択]を選択します。出力を選択する。行く!

+0

素晴らしい!それは魅力のように働く。データがスクリプト化されていないということだけが、私は挿入のスクリプトを意味します。オプションがあれば、いくつかの小さなサイズのテーブルでは、それは素晴らしいでしょう。 –

+1

さて、あなたはSPと機能を求めました。データの場合。タスク - >データのエクスポート –

+0

テーブルを使用してデータをスクリプトすることができます... [スクリプトオプションの生成]画面で、[スクリプトデータ]オプションをTrueに設定します。 –

0

syscommentsにSQLオブジェクトの作成テキストを取得するクエリを実行できますが、TSQLだけを使用してそれらをすべて別々のファイルに保存する方法はわかりません。

select * from syscomments 
+0

興味深い。私はテキスト列がソースコードのためだと思います。それは1つの長い長い線です。とにかく、spや関数名のidの名前を調べるには? –

+0

sysobjectsで参加できます。 私はあなたが環境を手に持たないので、これらの参加方法を理解できると思います。 sysobjectsにから選択 –

+0

*はo.name、 o.type、 Cを選択 –

4

1)を選択し、オブジェクトエクスプローラ

2)でデータベース名を右クリックし、「タスク>スクリプトの生成...」コンテキストメニュー

3)からでデータベースを選択しますリストには、[次へ]をクリックし、ストアドプロシージャとユーザ定義関数を確認し、選んだスクリプトのオプションオブジェクトの種類で

5)[次へ]をクリックします)

4次

をクリックしてください「新しいクエリウィンドウにスクリプト」

6)、ストアドプロシージャの選択画面上のすべてを選択して[次へ]をクリックします

7をクリックしてください)機能選択画面上のすべてを選択してクリックして、次

8をクリック)を選択し、 Finishをクリックしてください。

3

ここには、いくつかの種類のデータをエクスポートするprocがあります。以下のような

if exists (select * from sysobjects where name = 'ExportData_P') 
    drop proc ExportData_P 
go 

CREATE PROC dbo.ExportData_P ( 
    @tableName varchar(500), 
    @where varchar(5000) = '(1=1)' 
) 
AS 
BEGIN 
    SET NOCOUNT ON 

    DECLARE @sql varchar(8000) 
    DECLARE @fieldList varchar(8000) 
    DECLARE @valueList varchar(8000) 
    SELECT @fieldList = '', @valueList = '' 

    DECLARE @cols TABLE (column_name nvarchar(250), data_type varchar(250)) 
    DECLARE @c nvarchar(250), @data_type varchar(250) 

    INSERT INTO @cols 
    select column_name, data_type 
    from information_Schema.columns 
    where table_name = @tableName 


    WHILE EXISTS (SELECT TOP 1 * FROM @cols) 
    BEGIN 
     SELECT TOP 1 @c = column_name, @data_type = data_type FROM @cols 


     SELECT 
     @fieldList = @fieldList + @c + ', ', 
     @valueList = @valueList + CHAR(13) + 'case when ' + @c + ' is null then ''NULL'' else '''''''' + ' + 
      case when @data_type in ('text','ntext','char', 'nvarchar', 'varchar') then 
       ' REPLACE (REPLACE (REPLACE (' 
       else '' 
      end + 
      'IsNull (convert(varchar' + 
      (-- change this section to pass the length of varchar to convert 
       case when @data_type in ('uniqueidentifier') then '(50)' 
        when @data_type in ('text', 'ntext') then '(8000)' 
       else '' end 
      ) + 
      ', ' + 
      @c + 
      '), '''')' + -- end is null 
      case when @data_type in ('text','ntext','char', 'nvarchar', 'varchar') then 
       ', CHAR(39), CHAR(39)+CHAR(39)), CHAR(13), '''' + CHAR(13) + ''''), CHAR(9), '''' + CHAR(9) + '''') ' 
       else '' 
      end + 
      ' + '''''''' end + '', '' + ' 

     DELETE FROM @cols WHERE column_name = @c 
    END 

    SELECT @fieldList = LEFT (@fieldList, LEN(@fieldList)-1), 
     @valueList = LEFT (@valueList, LEN(@valueList)-1) 

    SELECT @sql = 'select ''insert into ' + @tableName + ' (' + @fieldList + ') ' + 
     ' VALUES (''+ ' + left (@valueList, len(@valueList)-5) + ''') '' from ' + @tableName + 
     ' WHERE ' + @where 

    -- into [#mcoe_temp_export' + @tableName + '] 
    print @sql 
    EXEC (@sql) 
    --EXEC ('select * from [#mcoe_temp_export' + @tableName + ']')   

    SET NOCOUNT OFF 
END 

go 

用途:

exec ExportData_P 'tablename' 
+0

テーブル名のリストを取得するには?それから、私はあなたのSPを使ってループします。 –

+1

sysobjectsからトップ10を選択してください。xtype = 'U' – Jamie

関連する問題