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

时间:2018-07-12 11:32:58

标签: sql-server sqlcmd

在SQL Server 2016中,我正在通过SQLCMD执行一个SQL脚本,如下所示:

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 个答案:

答案 0 :(得分:0)

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

1)调查BCP;它可能使您更有效地查看正在执行的操作,并且根据输出文件的大小,它可能会明显更快。 (1b:尽管痛苦不堪,但请看一下SSIS)

2)将执行数据推送到文件的Script.sql放入SQLCMD执行,并使PRINT语句正常工作,而无需-o。 (注意:如果这是一个复杂的存储过程,为什么不编写一个复杂的存储过程?)

3)监视服务器监视和探查器。如果这就是为什么需要输出,那么这仅用于调试目的。

通常,在我看来,问题的根源在于您使用了错误的工具来完成工作。如果您希望SQLCMD提供大量有关流程状态的输出,则可能在应使用BCP的地方使用它,该BCP旨在通过编程方式进行导出。根据我的经验,SQLCMD并不是运行复杂脚本的好界面;它需要一劳永逸。