0

次のように呼び出すことができる単純な SQL ログ プロシージャを記述する必要があります。

Log("This is my param1 = {0}, param2 = {1} and param3('{2}')", 
     @param1, @param2, @param3)

出力は、SQL Server "C:\output.txt" のファイルにリダイレクトする必要があります。

可変数のパラメーターを使用してそのような手順を使用することは可能ですか?どのように?

おそらく私は使用できる

exec master..xp_cmdshell 'echo created > c:\output.txt'
exec master..xp_cmdshell 'echo appended data >> c:\output.txt'
exec master..xp_cmdshell 'echo more data >> c:\output.txt'
4

2 に答える 2

1

まず、SQL Server の T-SQL では、Java でサポートされているようにストアド プロシージャに可変数の引数を使用できません。ただし、SQL Server 2005 には XML データ型があるため、引数を使用して単純な XML を作成し、それを 2 番目のパラメーターとして送信できます。最初は、プレースホルダーを含むログ ステートメントです。ストアド プロシージャでは、それらの値を XML から読み取ることができます。

次に、xp_cmdshell では「sa」権限が必要です。代わりに、これらのログ ステートメントを一時テーブルに書き込み、管理者が作成したストアド プロシージャを取得して、テーブル名とファイル パスを取得し、テーブルの内容を指定されたファイル パスにダンプすることができます。

以下のコメントのいずれかに従って、可変数の引数に関するコメントを編集しました

于 2012-08-23T15:14:16.800 に答える
1

パラメーターの数が有限である限り、SQL サーバーで null 許容パラメーターを使用して、オプションのパラメーターを実装できます。

そう

create proc prcLog
    @Format varchar(1000),
    @p1 varchar(100) = null,
    @p2 varchar(100) = null,
    @p3 varchar(100) = null,
    ....

exec prcLog '{0}', 'a'
exec prcLog '{0} : {1}', 'a', 'b'

ファイル IO と文字列操作の量を考えると、CLR ストアド プロシージャの方が適している可能性があります。

于 2012-08-23T15:24:14.880 に答える