SQL72007:语法检查失败'意外的文件结束发生'.批量附近:

NoS*_*ler 9 sqlcmd sql-server-data-tools visual-studio-2017

在SSDT项目中(使用VS2017/VS2015,SSDT版本15.1.61702.140),我无法构建我的项目.编译器一直在我的PostDeploymentScript中抱怨sql语句(是的,我已经将BuildAction属性设置为PostDeploy).sql语句是:

if ('$(env)' = 'dvp')    
BEGIN
    PRINT 'creating users for dvp'
    :r .\SecurityAdditions\usersdvp.sql 
END
ELSE IF ('$(env)' = 'qat')
BEGIN
    PRINT 'creating users for qat'
    :r .\SecurityAdditions\usersqat.sql
END 
Run Code Online (Sandbox Code Playgroud)

实际的错误消息是:

D:\My\File\Path\PostDeploymentScript.sql (lineNum, col): Error: SQL72007:
The syntax check failed 'Unexpected end of file occurred.' in the batch near:
Run Code Online (Sandbox Code Playgroud)

在最后一行(结束)的错误消息中引用的行号.知道是什么导致了这个吗?

NoS*_*ler 11

显然问题是由于GO我在引用的文件中的语句.有GO内部语句if else块是无效的.是一篇解释一点的文章.我能够通过GO从引用的文件中删除所有语句并将其拆分if else为两个来使其工作if.

IF ('$(env)' = 'dvp')
BEGIN 
    :R .\SecurityAdditions\UsersDVP.sql
END

IF ('$(env)' = 'qat')
BEGIN
    :R .\SecurityAdditions\UsersQAT.sql
END
GO 
Run Code Online (Sandbox Code Playgroud)


小智 6

我遇到了同样的错误,因为我忘记了用GO语句结束部署后脚本中包含的脚本之一。很难解决的是,错误将指向下一个脚本中的第一行,而不是缺少GO语句的脚本。