如何使用Microsoft SQL server Management Studio声明一个列出服务器上所有现有数据库的



我需要创建一个变量,列出我系统中所有现有的数据库,因为我需要它,但我不知道如何做到。我尝试过创建这样的变量:

DECLARE @nombreBD INT;
SET @nombreBD = (SELECT [database_id] FROM sys.databases Where name = 'model' )
SELECT @nombreBD AS Database_ID
PRINT @nombreBD
GO 

这个变量只得到我放在";其中";参数,但我需要全部获取。

表sys.databases显示了系统中所有现有的数据库,我需要从中获取一个布尔值,我想从列"中获取它;database_id";这就是我声明这个变量的原因。

这将创建一个具有列nombreBD的表名@DBList并将CCD_ 3插入该列,然后它会显示所有sql server数据库database_id

BEGIN
DECLARE @DBList TABLE (nombreBD INT)
INSERT INTO @DBList(nombreBD) SELECT database_id FROM sys.databases 
SELECT * FROM @DBList
END

这就是你需要的吗?

要实现您想要的,您需要使用一些动态SQL。像这样的东西应该适用于你的情况:

DECLARE @DBList TABLE (nombre varchar(50));
INSERT INTO @DBList(nombre) SELECT name FROM sys.databases 
WHERE name NOT IN ('master','tempdb','msdb');
declare @name nvarchar(50);
declare @sql nvarchar(2000);
DECLARE db_Cursor CURSOR FOR
SELECT nombre FROM @DBList;
OPEN db_Cursor;
FETCH NEXT FROM db_Cursor INTO @name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'USE ' + @name + N';'
exec sp_executesql @sql;
SET @sql = N'SELECT DB_NAME() AS DatabaseName, ''guest'' AS Database_User, [permission_name], [state_desc] 
FROM sys.database_permissions WHERE [grantee_principal_id] = DATABASE_PRINCIPAL_ID(''guest'') AND [state_desc] LIKE ''GRANT%'' AND [permission_name] = ''CONNECT'';';
exec sp_executesql @sql;
FETCH NEXT FROM db_Cursor INTO @name;
END;
CLOSE db_Cursor;
DEALLOCATE db_Cursor;

请注意,我已经更改了表变量以保存数据库名称,而不是它们的id。这是因为USE语句采用的是名称而不是id。

游标循环遍历这些值,构建各种sql语句并执行它们。

最新更新