我只是尝试使用查询编辑器中的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]
谢谢!
答案 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)