gpt4 book ai didi

SQL 服务器 : query to loop through

转载 作者:行者123 更新时间:2023-12-02 06:35:45 26 4
gpt4 key购买 nike

我有一个获取所有应用程序数据库的需求,我已经能够通过

select name from sys.database where database_id > 6

现在,我需要运行以下查询:

select 
User_FirstName
, User_Name
, User_Id
, User_ReadAccess
from
[name obtained from sys.databases].dbo.ADMN_User_Details

这是我到目前为止所写的内容,我在 database_Name.dbo.ADMN.User_Details 处收到错误:

declare @database_name varchar(50)
declare @User_FirstName varchar (50)
declare @User_Name varchar (50)
declare @User_Access int
declare @User_Id varchar (50)

declare Maximizer cursor FOR

select name from sys.databases
where database_id > 6

open Maximizer
fetch next from Maximizer into @database_name

while (@@FETCH_STATUS=0)
begin

select
@User_FirstName, @User_Name, @User_Id, @User_Access
from
@database_Name.dbo.ADMN.User_Details
end

close Maximizer
deallocate Maximizer

有人可以帮我吗?

谢谢

最佳答案

只要您是在系统管理上下文中而不是在野外使用它,您就可以为此使用动态 SQL。

--@sql holds your dynamic sql, @db holds the current DB
declare @sql varchar(1000)
declare @db varchar(100)

--populate your list of databases through which you'll iterate.
select name, 0 as run
into #dbs
from sys.databases where database_id > 6

--a while loop in sql...don't tell Jeff Moden
while exists (select 1 from #dbs where run = 0)
begin
set @db = (select top 1 name from #dbs where run = 0 order by name)
set @sql = '
select ''' + @db + '''
, User_FirstName
, User_Name
, User_Id
, User_ReadAccess
from '+ @db +'.dbo.ADMN_User_Details'
exec(@sql)
update #dbs
set run = 1
where name = @db
end

有几点需要注意:

  • 您的动态 SQL 变量需要足够长以保存 SQL 内容和数据库名称。
  • 我将 sys.database 更改为 sys.databases,因为这是表的名称
  • 如果您需要汇总用户名、ID 和读取访问的列表,我建议创建另一个临时表。这可能是个好主意,因为如果您有很多数据库,您的结果集可能会变得有点难以管理。

关于SQL 服务器 : query to loop through,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com