【问题标题】:How to Connect to SQL from Management Console using T-SQL如何使用 T-SQL 从管理控制台连接到 SQL
【发布时间】:2012-09-21 14:46:32
【问题描述】:

我有一组 SQL 服务器,分布在 25 个位置,它们都具有相同的数据库。我可以使用管理控制台手动连接到所有这些。在“新查询”下的服务器管理控制台中,我想学习如何用一个循环包装一个查询或一组 t-sql 语句,该循环首先连接到其中一个服务器,指定数据库,然后运行查询/语句。这样,如果我需要对所有数据库运行一个通用查询,例如更新数据库,我不必手动连接每个数据库,展开控制台,单击数据库,然后单击“新建查询。 "

这些服务器都命名为wsrv01、wsrv02、wsrv03等,所以我可以轻松地遍历这些名称;我只是不知道如何进行循环或建立连接。

这是一种独特的环境...我过去曾在其他项目中使用过 RedGate 并且喜欢它;但这是另一种情况。

基本上,我想避免这样做并深入每个服务器以运行查询:

【问题讨论】:

标签: sql-server-2008 tsql ssms


【解决方案1】:

如果您真的不能使用其他任何东西.. 尝试创建链接服务器。这样你就可以像这样简单地查询..

select * from <linkedserver>.<database>.<schema>.<object>

【讨论】:

    【解决方案2】:

    Martin Smaith 的回答是我的首选解决方案,但我可以提出 2 种其他方法:

    1) 您可以在 SSMS 中使用“SQLCMD 模式”。

    看起来像:

    :connect MyServer -U MyLogin -P MyComplexPassword
    --Then have some code
    
    :connect MyOtherServer ...
    --Then have some code
    

    但是你不能循环,所以你会有重复的代码。

    或者

    2) 您可以基于服务器列表创建带有 FOR 循环的 CMD 文件。这是我自己酿造的一个例子。只需将其复制粘贴到 REQ.CMD 并创建一个名为 SERVERS.LST 的文本文件,每行有一个服务器名称。连接将通过 Windows 身份验证。如果愿意,您可以将 OSQL 更改为 SQLCMD,但 OSQL 应该适用于 SQL 2008。

    REM To execute a SQL command or file to multiple servers
    REM Using a server list file
    REM And using 2 kind of parameters (script file or query)
    REM Pollus Brodeur - June 2007
    @echo off
    
    set PARAM1=%1
    set PARAM2=%2
    set PARAM3=1
    
    REM You need at least 1 parameter
    if x==%1x goto ERROR1
    if EXIST %PARAM1% (set ISFILE=1) else (set ISFILE=0)
    
    REM Setting Servers List File and verify file existance or X
    if x==%2x (set PARAM2=servers.lst)
    if X==%2 (set PARAM3=0 & set PARAM2=servers.lst & goto MAIN)
    if NOT EXIST %PARAM2% (goto ERROR2)
    
    REM Not interactive
    if X==%3 (set PARAM3=0)
    
    :MAIN
    echo ===============================================================================
    echo REQ - Execute a SQL command or file to multiple servers using a list file
    echo %DATE% %TIME%
    if %PARAM3%==0 (echo Non Interactive mode)
    echo ===============================================================================
    
    if %ISFILE%==0 (GOTO COMMAND)
    
    echo For following file :
    echo %PARAM1%
    goto EXEC
    
    :COMMAND
    echo For following command :
    echo %PARAM1%
    
    :EXEC
    echo ===============================================================================
    echo For following servers :
    type %PARAM2%
    echo ===============================================================================
    
    if %PARAM3%==1 (echo Interactive mode. Use X parameter to deactivate & pause)
    
    echo Exec...
    if NOT EXIST .\out mkdir out
    if EXIST out\req.out (del out\req.out)
    if %ISFILE%==0 (GOTO COMMAND1)
    
    for /F %%a in (%PARAM2%) do echo %%a & osql -S %%a -E -n -h-1 -w 9999 -u -i %PARAM1% -o out\req.out.%%a.txt
    goto ENDEXEC
    
    :COMMAND1
    for /F %%a in (%PARAM2%) do echo %%a & osql -S %%a -E -n -h-1 -w 9999 -u -Q %PARAM1% -o out\req.out.%%a.txt
    
    :ENDEXEC
    type out\req.out.*.txt >> out\req.out 2>&1
    echo ===============================================================================
    echo Execution is done. Output files are in .\out
    echo more /E /C out\req.out.*.txt
    echo more out\req.out
    echo ===============================================================================
    if %PARAM3%==1 (pause)
    goto END
    
    :ERROR1
    goto CALLEXAMPLE
    
    :ERROR2
    echo Error: Server File List named %PARAM2% doesn't exists
    goto CALLEXAMPLE
    
    :CALLEXAMPLE
    echo -------------------= REQ call examples =--------------------
    echo REQ.cmd Param1 Param2 Param3
    echo Param1 = command or scriptfile.sql {mandatory}
    echo Param2 = servers list file {servers.lst per default}
    echo Param3 = X {for non interactive mode}
    echo ------------------------------------------------------------
    
    :END
    

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2020-05-19
      • 2020-08-08
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多