在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脚本中”行,但是在输出文件中我可以看到许多表名条目。请帮助解决此问题,或建议是否还有其他方法可以解决此问题。
谢谢
答案 0 :(得分:0)
我将按顺序尝试以下解决方案:
1)调查BCP;它可能使您更有效地查看正在执行的操作,并且根据输出文件的大小,它可能会明显更快。 (1b:尽管痛苦不堪,但请看一下SSIS)
2)将执行数据推送到文件的Script.sql放入SQLCMD执行,并使PRINT语句正常工作,而无需-o。 (注意:如果这是一个复杂的存储过程,为什么不编写一个复杂的存储过程?)
3)监视服务器监视和探查器。如果这就是为什么需要输出,那么这仅用于调试目的。
通常,在我看来,问题的根源在于您使用了错误的工具来完成工作。如果您希望SQLCMD提供大量有关流程状态的输出,则可能在应使用BCP的地方使用它,该BCP旨在通过编程方式进行导出。根据我的经验,SQLCMD并不是运行复杂脚本的好界面;它需要一劳永逸。