2014-01-20 2 views
0

dotnet SqlCommand을 사용하여 이상한 오류가 발생했습니다.SqlCommand 및 여러 줄 주석 오류

/*IF OBJECT_ID ('dbo.xxx', 'P') IS NOT NULL 
DROP PROCEDURE [dbo].[xxx] 
GO 
*/ 

select * from dbo.abc 

내가했다있어 오류 "누락 된 최종 주석 표시 '* /'"

기본적으로 내가 거기 전에서 GO 여러 줄 주석이있는 명령 텍스트를 실행하고 있습니다

오류 범위를 좁힐 수 있었고 문제는 GO과 관련되어있는 것으로 보입니다. 내가 G O를 제거하면 작동합니다. 내가이 명령을 실행하고 SQL 프로파일에서 실행 된 쿼리를 보는 경우

내가 얻을 :

/*IF OBJECT_ID ('dbo.xxx', 'P') IS NOT NULL 
DROP PROCEDURE [dbo].[xxx] 

그래서 쿼리의 부분은 실행되지 않았습니다 ... 그리고 최종 주석 표시는

I 누락 '... 나는 비슷한 GO 문제와 MSDN에이 게시물을 본 것 같은 사람이 문제가되지 않았는지 검색했습니다

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/7e5ef20d-4b19-4930-9b1f-64304e6987e2/missing-end-comment-mark?forum=sqlreplication

나는이 문제가있는 유일한 사람입니까? 해결 방법이 있습니까?

+2

SQLCommand를 통해 실행중인 쿼리에 주석을 전달하는 시점은 무엇입니까? 저장 프로 시저를 서버에 저장할 때 이해하지만 여기에 요점을 이해하지 못합니다. –

+0

우리는 데이터베이스에 SQL 스크립트를 배치 할 수있는 도구를 가지고 있습니다. 기본적으로 도구 A를 사용하여 SQL Server에 배포하고 도구 B를 Oracle에 배포하고 도구 C를 MySQL에 배포하는 등 ... db versioning과 같은 작업을 수행 할 수있는 도구는 "any "db engine, etc ... db에 sql 코드를 배포하기 위해 DbCommand를 만들고 스크립트를 실행합니다. 때때로 스크립트에는 GO 문자열이 포함 된 주석이 들어 있습니다. –

+0

글쎄, 밖으로 나오지 마라. 당신이 기대하는 다른 해결책이 무엇인지 모르겠다. –

답변

4

요점을 보지 못했지만 문제는 GO입니다. GO은 Transact-SQL이 아니며 SSMS와 같은 도구의 배치 구분 기호입니다. GO없이 (또는 여러 줄 주석 또는 주석없이) 처음 시도하십시오.

+0

문제는 GO와 함께한다는 것을 알고 있습니다. 내가 모르는 이유는 주석 내부에서 해석되는 이유입니다. –

+0

주석 앞에 있기 때문에 먼저 구문 분석됩니다. –