代码之家  ›  专栏  ›  技术社区  ›  nickytonline

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

  •  0
  • nickytonline  · 技术社区  · 16 年前

    @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的列,但它没有。奇怪的是脚本中没有语法错误,当我从SQL Server Management Studio运行它时,它运行得很好。权限或哪个用户正在运行脚本没有问题,因为批处理文件中还有其他脚本可以正常运行。

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   Richard Beier    16 年前

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

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

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

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

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

    • sqlcmd-U%1-P%2-S%3-d%4-i 03_Case6395_Publication.sql-k-b>>dbupt.log 2>&1

    • 您是否尝试过使用SQL Profiler查看SQL实际执行的内容?有什么发现吗?