我希望在調用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]'
所以我的問題是我怎麼能叫dbo.generate_CSV過程內EXEC xp_cmdshell的,從而執行generate_CSV時,BCP拷貝被調用,我們讓我們的CSV文件。
編輯1: 當我刪除註釋並執行此我收到以下錯誤......
SQLSTATE = 37000,NativeError = 137錯誤= [微軟] [SQL本機客戶端 ] [SQL服務器]必須聲明標量變量「@dbName」。 SQLState = 37000,NativeError = 8180錯誤= [Microsoft] [SQL本機 客戶端] [SQL Server]無法準備聲明。 NULL
你怎麼說INLINE程序是什麼意思?和你的問題是什麼? – sepupic
如何在dbo.generate_CSV過程中調用exec xp_cmdshell,以便在執行generate_CSV時調用bcp副本並獲取我們的輸出CSV文件。 –
你已經寫完了所有的東西,你所需要的只是在「AS」之後擺脫「GO」並取消註釋EXEC – sepupic