1

我只是想从查询编辑器中使用 SQLCMD 编写一些基本的东西。

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

: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]

谢谢 !

4

2 回答 2

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
于 2013-06-04T16:19:00.693 回答
0

如果您不想使用批处理文件,该解决方案可能是最好的

如果您愿意将批处理文件添加到组合中,您可以执行类似于此处显示的操作批处理文件

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

于 2013-06-04T15:56:19.187 回答