2012-06-08 4 views
0

가능한 중복 :
How Can i display the output of SQL “PRINT” Command in C#?캡처 MS SQL 출력

내가 PRINT 명령을 통해이를 출력하여 다른 SQL 문을 생성하는 SQL 문을 가지고있다. 지금은 수동으로 SQL 편집기에서 실행하고 결과 문자열 쿼리를 복사 한 다음 다른 창에서 해당 쿼리를 실행해야합니다.

.NET 콘솔 앱을 사용하여 자동화하고 싶습니다. .NET에서 PRINT 문 출력을 캡처 할 수 있습니까? SQL PRINT 출력을 캡쳐하는 또 다른 방법이 있습니까? 대신

Print @sql 

답변

1

은 (ADO, Linq2Sql, EF) 원하는 다음 일반적으로 문을 실행 방법

Select @sql 

캡처 해. 레코드 세트에서 sql을 반환하면 실제로 데이터를 반환하도록 설계되지 않은 작업 (SQL이 실제로 반환되는 데이터 임)을 수행하는 대신 모든 프레임 워크가 데이터를 처리하는 일반적인 방법에 의존 할 수 있습니다.

당신은 당신이 원하는 경우이 단계를 건너 뛰고 전체 왕복을 우회

EXEC sp_executesql @sql 

을 할 수 있습니다. EXECsp_ExecuteSql. 당신은 SQL 서버/오라클을 사용하는 경우

+0

Print 문을 사용해야하는 경우 어떻게해야합니까? 테이블 에서뿐만 아니라 다른 SQL 쿼리를 만드는 출력 문자열을 선택하지 않습니다. –

+0

그럴 필요가 있다면, 그 자리에 서게해서 죄송합니다. 나는 print 서술에서 데이터를 추출하는 경험이 없다. –

+0

정말 슬픈 일입니다. –

0

당신이 EXEC 중 하나를 사용하거나 오라클을 사용하는 경우

DECLARE @sqlCommand varchar(1000) 
SET @sqlCommand = 'SELECT * FROM SOME_TABLE' 
--Use Exec 
EXEC (@sqlCommand) 
--or you can use the sp_executesql 
EXECUTE sp_executesql @sqlCommand 

을에서 sp_executesql 수있는 SQL 서버의 동적 SQL 아주 쉽게

를 실행할 수 있습니다, 당신은 필요 EXECUTE IMMEDIATE

2

"직접 인쇄 명령의 출력을 캡처하는 방법"이라는 직접적인 질문에 대한 답을 찾기 위해 여기에 왔지만 이전 대답을 확장하고 싶습니다.

당신이 세트 명령

SET @sqlCommand = @sqlCommand + @newPart; 

그것은 불행하지만 SQLSERVER 내가 최대 크기를 초과했습니다 생각하기 때문에 가끔 문제로 실행에 조각을 연결할 수있는 여러 인쇄 문을 사용하여 SQL 명령을 구축하는 경우 내가 없을 때 @ sqlCommand에 대한. 이 도움이

EXEC ( 
'MERGE ' + @targetTable + ' t ' + 
'USING ' + @sourceTable + ' s ' + 
'ON ' + @keycondition + ' ' + 
'WHEN MATCHED AND ' + @updateCondition + ' THEN ' + 
    'UPDATE SET ' + @updateColumns + ' ' + 
'WHEN NOT MATCHED BY TARGET THEN ' + 
    'INSERT (' + @insertTargetColumns + ') ' + 
    'VALUES (' + @insertSourceColumns + ') ' + 
'WHEN NOT MATCHED BY SOURCE THEN ' 
    'UPDATE SET deleteFlag = ''D'', updDtTm = GETDATE()' 
) 

희망 : 나는 종종 다음과 같이 exec 명령에서 그들을 연결하여, 어쨌든 같은 조각의 대안 콘텐츠를 필요로 별도로 조각을 들고이 문제를 피해갑니다. 스냅 샷에서 증분 업데이트로 옮겨 가고 있으므로 sourceTable에 deleteFlag가 있고 마지막 절을 사용하지 않습니다.

관련 문제