SQL Server ': setvar'오류


123

다음과 같이 T-SQL에서 몇 가지 스크립트 변수를 만들려고합니다.

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

그러나 이것을 실행할 때 '': '근처에 잘못된 구문이라는 오류가 표시됩니다. 내가 뭘 잘못하고 있죠?

답변:


238

: setvar는 SQL 명령 모드에서만 작동하므로 관리 스튜디오에서 정상적인 SQL 실행 중에있을 수 있으며 명령 모드로 전환하지 않았습니다.

이 작업은 SQL Server Management Studio의 사용자 인터페이스를 통해 "쿼리"메뉴로 이동하고 "SQLCMD 모드"를 선택하여 수행 할 수 있습니다.


19
이는 Visual Studio의 데이터> 스키마 비교 유틸리티를 사용할 때도 문제가됩니다. 유틸리티 내에서 결과 변경 스크립트를 실행하면 문제가 없지만 비교를 수행 한 후 변경 스크립트를 내보내거나 xcopy하기로 결정한 다음 결과 변경 스크립트를 SSMS로 가져 오기 / 붙여 넣기를 시도하면 위와 같이 실패합니다. 번들 배포에 db 변경 스크립트를 포함하는 경우 분명히 이것은 문제가 될 수 있습니다. 따라서 위와 같이 메뉴를 통해 스크립트를 실행하기 전에 SQL 명령 모드를 켜거나 실행하기 전에 사용자 지정 설치 스크립트가 작동하는지 확인해야합니다.
rism

6
Visual Studio (2013) : SQL 메뉴-> 실행 설정
larsts

이 문제는 scema 비교 생성 스크립트를 사용하여 설치 후 처음 시작할 때 내 응용 프로그램에서 내 데이터베이스를 구축하고 스크립트를 executenonquery ()에 전달하려고합니다. SQLCMD 모드를 통해 실행하는 방법을 찾거나 시작을 위해 모든 변수를 대체하는 스크립트를 해킹해야합니다.
스콧

참고로-DB 프로젝트 게시에서 생성 된 생성 스크립트를 사용한 다음 setvar를 사용하여 참조 된 변수에 대한 모든 참조를 제거했습니다. 내 데이터베이스 이름을 하드 코딩했기 때문에 CREATE DATABASE [$ DatabaseName] 대신 단순히 CREATE DATABASE MYDBNAME이었습니다. 이 스크립트는 이제 설치 후 처음 응용 프로그램을 시작할 때 executenonquery ()를 통해 데이터베이스를 생성하는 데 사용됩니다.
Scott


2

SQL2012의 경우 :

도구 / 옵션 / 쿼리 실행으로 이동하여 기본적으로 SQLCMD 모드에서 새 쿼리를 엽니 다.

새 쿼리 버튼을 누르고 변수 정의가 강조 표시되었는지 확인하십시오. 이제 스크립트가 올바르게 실행되어야합니다.

이전 버전:

http://blog.sqlauthority.com/2013/06/28/sql-server-how-to-set-variable-and-use-variable-in-sqlcmd-mode/


Visual Studio는 또한 : setvar를 사용하는 .sql 파일이 열려있을 때 프로젝트에 대한 구문 오류를보고합니다. 여기에 설명 된 옵션 변경은 오류를 제거하고 명령문에서 "빨간 구불 구불 한 밑줄"을 피할 것입니다 (효과를 확인하려면 열려있는 .sql 파일을 모두 닫았다가 다시 열어야합니다).
BRebey

0

교체 시도 :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

와:

USE [MesProduction_Preloaded_KLM_MesSap]
GO

나머지 스크립트에서 변수 평가에 도움이되지 않습니까? $ (DatabaseName). [dbo]. [Whatever]
CRice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.