使用SQLCMD的SQL脚本用于不同的物理服务器

时间:2013-06-04 15:30:07

标签: sql sql-server-2008

我只是尝试使用查询编辑器中的SQLCMD编写一些基本内容。

我想在不同的sql server中执行相同的sql语句,并希望查看输出。这与性能无关,但我们的想法是只检查我们迁移的不同服务器中的数据。我刚刚学会了SQLCMD在这里会非常有用,但想知道如何编写脚本。假设所有服务器中都存在相同的db和表。到目前为止,我在下面做了我需要的东西,我相信这可以做得更好!

:Connect Server1
SELECT count (*) FROM [DB].[dbo].[Table1]
SELECT count (*) FROM [DB].[dbo].[Table2]

:Connect Server2
SELECT count (*) FROM [DB].[dbo].[Table1]
SELECT count (*) FROM [DB].[dbo].[Table2]

:Connect Server3
SELECT count (*) FROM [DB].[dbo].[Table1]
SELECT count (*) FROM [DB].[dbo].[Table2]

谢谢!

2 个答案:

答案 0 :(得分:1)

有一个名为SchemaCrawler的项目,可用于比较2个不同的数据库。我使用批处理文件编写脚本并且运行良好。

但是,从批处理执行MSSQL查询的最佳方法是这样的。这演示了如何使用胡萝卜字符表示行连续,变量的延迟扩展,SQL结果输出到文件以及从文件中读取变量:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: batch file for sql query
SET HOST=qa071.xyz.com
SET FIELDVAL=PRE%%
SET DBNAME=MYDB
SET USER=username
SET PASS=Passw3rd1

:: Do query
SET SQLSTRING=SELECT PARM_ID, PARM_NAME, PARM_VALUE^
 FROM CONFIG^
 WHERE PARM_NAME LIKE '%FIELDVAL%'
ECHO !SQLSTRING!
ECHO.
ECHO sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER! -P !PASS!
sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER! -P !PASS!

:: Count results and display count
SET SQLSTRING=SELECT COUNT(*)^
 FROM TB_CONFIG^
 WHERE PARM_NAME LIKE '%FIELDVAL%'
ECHO !SQLSTRING!
ECHO.
ECHO sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER! -P !PASS! -h -1
sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER!^
 -P !PASS! -h -1> count.txt
SET /P THECOUNT=<count.txt
ECHO The count is: %THECOUNT%
ECHO.
DEL /Q count.txt

ECHO Query is done. Hit any key to close this window....
pause>nul

答案 1 :(得分:0)

如果您不想使用批处理文件

,该解决方案可能是最佳解决方案

如果您愿意添加批处理文件,可以执行此处显示的内容Batch File

您可以通过创建服务器组在SSMS内执行此操作。 MSDN