すべてのパラメータが指定された後に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
インラインの手順を言って何を意味するのですか?あなたの質問は何ですか? – sepupic
generate xp_cmdshellをdbo.generate_CSVプロシージャ内で呼び出すにはどうすればよいですか?generate_CSVが実行されると、bcpコピーが呼び出され、出力CSVファイルが取得されます。 –
あなたはすでにすべてを手に入れました。あなたが必要とするのは、 "AS"の後に "GO"を取り除き、EXEC – sepupic