Sql server 2005 sqlcmd运行脚本,但脚本不影响数据库

Sql server 2005 sqlcmd运行脚本,但脚本不影响数据库,sql-server-2005,batch-file,sqlcmd,Sql Server 2005,Batch File,Sqlcmd,所以我们有一个运行SQL脚本的.bat文件,例如 @ECHO --- 03_Case6395_Publication.sql --- >> dbupt.log sqlcmd -U %1 -P %2 -S %3 -d %4 -i 03_Case6395_Publication.sql -k -b >> dbupt.log IF ERRORLEVEL 1 GOTO ErrorTag 脚本运行时不会出现错误,但脚本实际上不会影响数据库。在上面的示例中,以下是正在运行的内容:

所以我们有一个运行SQL脚本的.bat文件,例如

@ECHO --- 03_Case6395_Publication.sql ---  >> dbupt.log
sqlcmd -U %1 -P %2 -S %3 -d %4 -i 03_Case6395_Publication.sql -k -b >> dbupt.log
IF ERRORLEVEL 1 GOTO ErrorTag
脚本运行时不会出现错误,但脚本实际上不会影响数据库。在上面的示例中,以下是正在运行的内容:

IF NOT EXISTS (SELECT 1 FROM [dbo].[syscolumns] WHERE [NAME] = N'MandatoryInList' AND [ID] = object_id(N'Pub_Type'))
BEGIN
    ALTER TABLE [dbo].[Pub_Type] ADD [MandatoryInList] bit NULL CONSTRAINT [DF_PubType_MandatoryInList] DEFAULT (0)
END
ELSE
BEGIN
    ALTER TABLE [dbo].[Pub_Type] ALTER COLUMN [MandatoryInList] bit NULL 
END
GO
该脚本非常简单,您可能希望它添加一个名为MandatoryInList的列,但是它没有。奇怪的是,脚本中没有语法错误,当我从SQLServerManagementStudio运行它时,它运行良好。权限或运行脚本的用户没有问题,因为批处理文件中还有其他脚本可以正常运行

我还应该提到,它通过创建一个新进程并运行它,但不显示命令窗口,从GUI运行。但无论如何,我已经像这样运行了几个月,没有任何问题的工具


有什么想法吗?

所以它可以从ManagementStudio工作,但不能从调用sqlcmd的批处理文件工作。奇怪

我不知道这是什么原因,但以下是一些想法:

  • 如果从命令提示符手动运行同一个“sqlcmd”命令,而不是从批处理文件运行,该命令是否有效

  • 如果您从命令提示符运行批处理文件,而不是从GUI应用程序调用它,那么它是否工作

  • 它在向dbupt.log文件写入什么?它是否有标题“--03_Case6395_Publication.sql”-”,然后是空的

  • 能否向脚本中添加一些PRINT语句,以便查看它是在执行IF还是ELSE部分

  • 您是否可以尝试使用“2>&1”操作符将错误流重定向到日志文件?例如:

    sqlcmd-U%1-p%2-S%3-d%4-i 03\U Case6395\U Publication.sql-k-b>>dbupt.log 2>&1

  • 你能试着把“IF ERRORLEVEL 1”改为“IF NOT ERRORLEVEL 0”吗

  • 您是否尝试过使用SQL事件探查器查看实际执行的SQL?有什么事吗


我怀疑如果您使用update语句,它会工作得很好,但是ALTER语句在这种情况下很奇怪。。。