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

SQL Server sqlcmd在脚本中执行OS命令

  •  0
  • usersam  · 技术社区  · 6 年前

    在SQL Server 2016中,我正在通过 SQLCMD 这样地:

    SQLCMD -H XXXXXX,1433 -U username -P password -d mydatabase 
           -v varMDF="testing" -i "Script.sql" -o "DATA.txt"
    

    而在 Script.sql ,我想将一些文本回送到控制台,以查看进度。我在脚本中有一个while循环并执行命令

    echo I am in sql script
    

    如图所示:

    OPEN tab_cursor  
    
    FETCH NEXT FROM tab_cursor INTO @tablename 
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN
        !!echo i am in sql script   
        PRINT @tablename    
    
        FETCH NEXT FROM tab_cursor INTO @tablename
    END 
    
    CLOSE tab_cursor  
    DEALLOCATE tab_cursor
    

    问题是,它在控制台中只显示一次行“我在SQL脚本中”,但在输出文件中可以看到表名的许多条目。请帮助解决此问题,或者建议是否有其他方法来解决此问题。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Dylan Brams    6 年前

    我将按顺序尝试以下解决方案:

    1)查看bcp;它可能允许您更有效地查看正在执行的操作,并且根据输出文件的大小,它可能更快。(1b:看看SSIS,尽管这是一个巨大的痛苦)

    2)将sqlcmd执行放在执行数据推送到文件的script.sql中,让print语句在没有-o的情况下正常工作。(注意:如果这是一个复杂的存储过程,为什么不编写一个复杂的存储过程?)

    3)与服务器监控和探查器进行监视。如果这就是您需要输出的原因,那么这将仅用于调试目的。

    一般来说,在我看来,你问题的根源在于你使用了错误的工具。如果您想要从sqlcmd获得关于进程状态的大量输出,您可能会在应该使用bcp的地方使用它,bcp是为以编程方式进行导出而设计的。以我的经验来看,sqlcmd并不是运行复杂脚本的好界面;它需要火和忘记。