2017-12-18 14 views
0

すべてのパラメータが指定された後にdbo.generate_CSVプロシージャが呼び出されると、実行されるxp_cmdshellを含む別のインラインストアドプロシージャが必要になります。インラインプロシージャとしてxp_cmdshellを呼び出すストアドプロシージャ

bcpエクスポートについては、xp_cmdshell以外の方法はないと思います。

基本的には、ユーザはgenerate_CSVという手順を呼び出して、必要な出力を得るだけです。

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 
IF EXISTS (select * from sysobjects where name ='dbo.generate_CSV ') 
DROP procedure dbo.generate_CSV 
GO 
    CREATE procedure dbo.generate_CSV 
    (
     @dbName varchar(100), 
     @tblName varchar(100), 
     @outputPath varchar(100) 
    ) 

AS 

GO 

    DECLARE @sql varchar(8000) 
    SELECT @sql = 'bcp "select * from @[email protected]"' + ' queryout 
    @outputPath -c -t"; " -r"\n" -T -S localhost' --+ @@servername 



--EXEC master..xp_cmdshell @sql 

GO 

ユーザーの唯一の懸念は、この手順を実行しています。

EXEC dbo.generate_CSV @dbName = '[dbName]', @tblName = 
'[tblName]',@outputPath = '[outputPath]' 

だから私の質問はgenerate_CSVが実行された場合は、bcpコピーが呼び出されるように、私はdbo.generate_CSV手順内のexec xp_cmdshellをを呼び出し、我々はCSVファイルを得ることができる方法です。

EDIT 1:私は、コメントを削除し、私は次のエラーを受け取り、これを実行 ...

SQLSTATE = 37000、NativeErrorに= 137エラー= [Microsoft]の[SQLネイティブ クライアント] [SQL Serverの]スカラー変数 "@dbName"を宣言しなければなりません。 SQLState = 37000、NativeError = 8180エラー= [Microsoft] [SQLネイティブ クライアント] [SQL Server]ステートメントを準備できませんでした。 NULL

+0

インラインの手順を言って何を意味するのですか?あなたの質問は何ですか? – sepupic

+0

generate xp_cmdshellをdbo.generate_CSVプロシージャ内で呼び出すにはどうすればよいですか?generate_CSVが実行されると、bcpコピーが呼び出され、出力CSVファイルが取得されます。 –

+1

あなたはすでにすべてを手に入れました。あなたが必要とするのは、 "AS"の後に "GO"を取り除き、EXEC – sepupic

答えて

1

あなたはtblNameこの方法を連結する必要があります。

SELECT @sql = 'bcp "select * from ' + @dbName+ '..' + @tblName + '"' + ' queryout 
    @outputPath -c -t"; " -r"\n" -T -S localhost' --+ @@servername 
+0

ああ、ありがとう、間違った間違い。 –

関連する問題