AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 1853
Accepted
Kyle Brandt
Kyle Brandt
Asked: 2011-03-23 09:00:49 +0800 CST2011-03-23 09:00:49 +0800 CST 2011-03-23 09:00:49 +0800 CST

在 Management Studio T-SQL 查询中指定连接

  • 772

将用户作为角色添加到数据库服务器时,我经常使用 GUI 中的“脚本此操作”功能。然后,我只需转到“连接 :: 更改连接”以在我的其他服务器上执行相同操作。

有没有办法可以在脚本操作中指定连接,这样我就不必执行第二个更改连接步骤?

sql-server-2008 ssms
  • 3 3 个回答
  • 4030 Views

3 个回答

  • Voted
  1. Best Answer
    SQLRockstar
    2011-03-23T09:08:38+08:002011-03-23T09:08:38+08:00

    无法将其作为 SSMS 脚本的一部分执行此操作,但您确实有两个选择。

    您可以做的一件事是使用 SQLCMD 模式和 ::connect 命令,以便拥有一个将连接到多个服务器并运行该脚本的脚本。如果您为用户保存脚本并使用 :r 命令从文件加载脚本,这将非常有效。

    您可以做的另一件事是配置中央管理服务器,然后一次针对多台服务器运行脚本。

    • 12
  2. Dave
    2011-07-07T07:32:33+08:002011-07-07T07:32:33+08:00

    实际上,在 T-SQL 中是可能的,但你必须满足一定的条件并跳过几个环节。

    • 首先,您需要在运行查询的服务器上启用远程查询 (OPENDATASOURCE/OPENROWSET)。
    • 其次,您需要确保目标服务器启用了远程访问。
    • 第三,您将需要大量使用动态 SQL,以便您可以将 T-SQL 代码“注入”到要执行的目标服务器的数据库引擎中。

    这是一个示例脚本,可让您利用 CMS 自动执行 SQL 任务。

    /**********************************************************************/
    
    /* Global change password script                                      */
    
    /*                                                                    */
    
    /* This script changes the password for a SQL login on all servers    */
    
    /* managed by a Central Management Server. It assumes that the login  */
    
    /* exists on all servers, and that all servers are SQL 2005 or later. */
    
    /**********************************************************************/
    
    DECLARE @nServer NVARCHAR (128) -- Variable to hold the instance name retrieved from the CMS
    
    DECLARE @nSQL NVARCHAR (4000)   -- Variable to hold dynamic SQL
    
    DECLARE @ServerFetch INT        -- Variable to hold the fetch status. In SQL 2005, the @@FETCH_STATUS
    
                                    -- variable is scoped at the system level, so if another process is also
    
                                    -- using a cursor the @@FETCH_STATUS variable will be set according to
    
                                    -- that operation. This allows us to store a persistent value.
    
    
    DECLARE curServer CURSOR LOCAL STATIC FOR  -- Declare the cursor with the LOCAL and STATIC options, and
    
                                               -- retrieve the list of server names from the Central Management
    
                                               -- Server. The value in the [sysmanagement_shared_server_groups_internal]
    
                                               -- table is user-defined; for purposes of this example we have
    
                                               -- created a group named "SQL2008".
    
        SELECT DISTINCT
    
        s.server_name AS 'ServerName'
    
        FROM OPENDATASOURCE ('SQLOLEDB', 'Data Source = CMS1\Management; Integrated Security = SSPI').msdb.dbo.sysmanagement_shared_server_groups_internal g
    
        INNER JOIN OPENDATASOURCE ('SQLOLEDB', 'Data Source = CMS1\Management; Integrated Security = SSPI').msdb.dbo.sysmanagement_shared_registered_servers_internal s ON g.server_group_id = s.server_group_id
    
        WHERE g.name = 'SQL2008'
    
        ORDER BY s.server_name
    
    OPEN curServer
    
    FETCH FIRST FROM curServer INTO @nServer       -- Retrieve the first row
    
    SET @ServerFetch = @@FETCH_STATUS              -- Store the status of the fetch operation
    
    WHILE @ServerFetch = 0                         -- If the fetch was successful, we enter the loop. Otherwise
    
                                                   -- execution passes to the statement following the END statement.
    
        BEGIN
    
        -- Build the dynamic SQL to alter the password for the SQL login.
    
        SET @nSQL = 'EXEC OPENDATASOURCE (''SQLOLEDB'', ''Data Source = ' + @nServer
    
            + '; Integrated Security = SSPI'').master.dbo.sp_executesql N''ALTER LOGIN SQLLogin WITH PASSWORD = ''''<enterStrongPasswordHere>'''''
    
        -- Execute the dynamic SQL.
    
        EXEC sp_executesql @nSQL
    
        FETCH NEXT FROM curServer INTO @nServer    -- Retrieve the next row.
    
        SET @ServerFetch = @@FETCH_STATUS          -- Store the status of the fetch operation.
    
        END
    
    CLOSE curServer        -- Close the cursor.
    
    DEALLOCATE curServer   -- Remove the cursor from memory.
    
    • 2
  3. gbn
    2011-03-23T09:07:14+08:002011-03-23T09:07:14+08:00

    不,只有数据库USE Database。连接不可编写脚本。

    SSMS 2008 (?) 和其他工具提供了“在多个服务器上运行”的能力。抱歉,我目前的角色没有使用此功能,所以没有这个问题。

    • 1

相关问题

  • 连接不同地理区域的数据库的最佳实践

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve