Sql server 2005 sqlcmd运行脚本,但脚本不影响数据库
所以我们有一个运行SQL脚本的.bat文件,例如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 脚本运行时不会出现错误,但脚本实际上不会影响数据库。在上面的示例中,以下是正在运行的内容:
@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?有什么事吗