2017-12-18 7 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 절차 내에서 간부 xp_cmdshell을 호출하고 우리가 우리의 CSV 파일을 얻을 수있는 방법이다.

편집 1 : 내가 코멘트를 제거하고 나는 다음과 같은 오류가 나타날이 실행 ...

SQLSTATE = 37000, NativeError = 137 오류 = [마이크로 소프트] [SQL 기본 클라이언트] [SQL 서버 ] 스칼라 변수 "@dbName"을 선언해야합니다. SQLState = 37000, NativeError = 8180 오류 = [Microsoft] [SQL Native 클라이언트] [SQL Server] 문을 준비 할 수 없습니다. NULL

+0

인라인 절차를 말하는 무엇을 의미합니까? 질문은 무엇입니까? – sepupic

+0

generate xp_cmdshell을 dbo.generate_CSV 프로 시저 내에서 호출하여 generate_CSV가 실행될 때 bcp copy가 호출되고 출력 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

아, 감사합니다. 바보 같은 실수입니다. –

관련 문제