SQL Server 在SSMS中对同一服务器中的多个数据库运行相同的查询

fumotvh3  于 2023-02-15  发布在  其他
关注(0)|答案(3)|浏览(163)

在SSMS中可以对某些数据库运行相同的查询吗?我想的是类似于带有数据库名称的数组,并在其中循环,可能使用SQLCMD模式。
一些伪代码:

:setvar arr ["db1", "db2", "db3"]
foreach $db in $arr
    :setvar database $db
    use $(database)
    go
    select * from table

谢谢

nnsrf1az

nnsrf1az1#

--  To Achive your Desire OutpUt You Have to Use Dynamic Query
-- you can Achieve this in TSQL 
-- TO Know The Database ID  Run Below Query
/*
SELECT * FROM Sys.databases WHERE database_id >4
*/


 USE MASTER
    GO
    BEGIN TRAN

    DECLARE @strt INT,@End INT,@Database NVARCHAR(255)

    SELECT * INTO #T FROM Sys.databases WHERE database_id IN (4,5,6)-- Here you Have to Defined the Database ID 
    ORDER BY 1

    SELECT ROW_NUMBER ()OVER (ORDER BY database_Id)Db_Id,* INTO #TT FROM #T
    SET @strt=1
    SELECT @End=Max(Db_ID)FROM #tt

    WHILE @strt<=@END
         BEGIN
             DECLARE @string NVARCHAR(MAX)
             SELECT @Database=NAME FROM #TT WHERE Db_ID=@strt

            Set @string='  Select * from '+@Database+'..Table_Name'

              SET @strt=@strt+1
              PRINT @string
              EXEC(@string)
         END

    ROLLBACK TRAN
6ioyuze2

6ioyuze22#

下面是一个例子,使用我的两个数据库(Staging和Warehouse)来访问每个数据库中的sys.columns表。只需将IN过滤器更改为您想要的任何数据库的名称,并将“.sys.columns”更改为您需要的模式/表名称。

DECLARE @query NVARCHAR(MAX) = ''
;

SELECT @query += CONCAT('SELECT * FROM ',[name],'.sys.columns;')
FROM sys.databases
WHERE [name] IN ('Staging','Warehouse')
;

EXEC sp_executesql @query;
ehxuflar

ehxuflar3#

您也可以使用本地服务器组执行此操作。

  • 查看--〉已注册的服务器
  • 右键单击“本地服务器组”并新建
  • 向组(任何要查询的数据库)添加新的服务器注册。请确保在[连接属性]选项卡中指定数据库

现在您可以右键单击LocalServerGroup文件夹并执行一个新查询,该查询将在该文件夹中的所有数据库上运行。

相关问题