SQL 스크립트 오류 : 배치 당 하나의 명령문 만 허용됩니다.


128

PostDeployment의 DACPAC에서 실행하려는 4 개의 SQL 스크립트가 있지만 그중 3 개의 VS 프로젝트를 빌드하려고하면이 오류가 발생합니다.

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

스크립트 INSERT는 DB의 다른 테이블에있는 명령문 만 포함합니다 . 그리고 그들 모두는 이렇게 구성되어 있습니다

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');

다른 테이블과 다른 데이터에서만.

내 질문은 모든 스크립트가 구문과 연산 측면에서 동일 할 때 VS가 3 가지에 대해 불평하는 이유는 무엇입니까?

추신 : 오류가 암시하는 것처럼 문장 사이에 'GO'를 추가하면 아무것도하지 않습니다.

답변:


319

문제를 발견했습니다. VS에서 파일을 추가했을 때 Build Action = None파일 속성에서 설정 하는 것을 잊었습니다 . 따라서 변경하면 문제가 해결되고 프로젝트가 컴파일됩니다.


26
대단한 캐치. 와우, 마이크로 소프트? 그 오류나 메시지는 어떤 방식, 형태 또는 형태로 직관적입니까?
Mike K

9
"잊어 버린"사용으로 혼란스러워하는 것을 제외하고이 답변에 감사하십시오. 처음에는 그것이 필요한지 어떻게 알 수 있습니까?
pettys

2
전에 누군가가 :) 빌드 작업 없음에 대해 이야기하는 동안 비슷한 스크립트 a를 한 적이 있기 때문에
코스 민 Ionascu을

이 문제가 해결되었습니다. 엄지 손가락!
dance2die

3
대단해! 내 하루를 구했다. MSO는 이러한 오해의 소지가있는 메시지를 부끄러워합니다
Dio Phung

8

그럼에도 불구하고 이것은 꽤 오래 된 것 같습니다. 나는 또한 몇 시간 동안 붙어 있었고이 방법은 많은 사람들에게 도움이 될 수 있다고 생각합니다.

에서 Database project로 설정된 파일 Build은 데이터베이스 구조로 간주되므로 해당 파일에서 의도적으로 하나의 명령문 만 허용됩니다. Go또는 다른 배치 종결자가 해당 동작을 변경하지 않습니다. 해당 메시지는 실수 일뿐입니다. 자세한 정보는 여기에 있습니다.

이러한 프로젝트에는 파일에 대한 다른 빌드 옵션이 많이 있습니다. 귀하의 경우에는 그런 것 같습니다 PostDeploy. 이러한 파일에는 다음과 같은 다양한 명령이있을 수 있습니다 inserts.

그런 다음 데이터베이스 프로젝트의 출력을 Data-Tier DB 애플리케이션 용 dacpac 파일로 사용할 수 있습니다 (그렇지 않으면 포함되지 않음).


-3

각 명령문의 마지막에서; (세미콜론)을 제거하면 확실하지 않지만 위의 삽입 명령문 사이에 GO가 필요하지 않습니다.


했어요 아무것도하지 않습니다. GO가 필요하지는 않지만 2 시간 이상 낭비했기 때문에 시도했습니다.
Cosmin Ionascu

4
각 문장 뒤에 세미콜론을 포함시키는 것은 표준 구문이며 몇 년 동안 옹호되었습니다. 세미콜론이 없어서 2 가지가 잘못되었습니다. 세미콜론이 모범 사례 인 세미콜론을 포함하지 않도록 개발자에게 조언하는 것은 의문의 여지가 있습니다.
Brandon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.