2013-07-04 5 views
-1

sp_MSforeachdb를 사용하여 다음 SQL 쿼리를 변환 할 수있는 사람은 누구입니까? SQL Server 2005 SP4를 사용하고 있습니다. 감사!sp_MSforeachdb를 사용하는 모든 데이터베이스에서 sp_helprotect

DECLARE @tmpResults TABLE 
(Owner sysname, Object sysname, Grantee sysname, Grantor sysname, ProtectType nvarchar(10), Action nvarchar(60), Column1 sysname) 

DECLARE @DB_Grant TABLE 
(DBName sysname, Owner sysname, Object sysname, Grantee sysname, Grantor sysname, ProtectType nvarchar(10), Action nvarchar(60), Column1 sysname) 

USE master 
INSERT INTO @tmpResults EXEC sp_helprotect; 
INSERT INTO @DB_Grant SELECT DB_Name(), t.* FROM @tmpResults t 
DELETE @tmpResults 

USE model 
INSERT INTO @tmpResults EXEC sp_helprotect; 
INSERT INTO @DB_Grant SELECT DB_Name(), t.* FROM @tmpResults t 
DELETE @tmpResults 

-- Repeat for all remaining DB 

SELECT * FROM @DB_Grant 
ORDER BY DBName, Grantee, Action 
+2

전쟁에서 SQL, bitte을? – wildplasser

+0

Quelle oder Quel? – RJIGO

+0

"퀼", 분명히. 그러나 "켈레"는 더 나은 소리를 낸다. IMHO. – wildplasser

답변

1

이 그것을 수행해야합니다

IF OBJECT_ID('tempdb..#dbGrant') IS NOT NULL 
    DROP TABLE #dbGrant 
IF OBJECT_ID('tempdb..#tempResults') IS NOT NULL 
    DROP TABLE #tempResults 

CREATE TABLE #dbGrant 
(
[DBName] sysname, 
[Owner] sysname, 
[Object] sysname, 
[Grantee] sysname, 
[Grantor] sysname, 
[ProtectType] nvarchar(10), 
[Action] nvarchar(60), 
[Column] sysname 
) 

CREATE TABLE #tempResults 
(
[Owner] sysname, 
[Object] sysname, 
[Grantee] sysname, 
[Grantor] sysname, 
[ProtectType] nvarchar(10), 
[Action] nvarchar(60), 
[Column1] sysname 
) 

EXEC sp_MSforeachdb 'IF ''?'' NOT IN (''tempDB'') 
BEGIN 
     INSERT INTO #tempResults EXEC sp_helprotect; 
     INSERT INTO #dbGrant SELECT ''?'',t.* FROM #tempResults t 
     TRUNCATE TABLE #tempResults 
END' 

SELECT * FROM #dbGrant 
ORDER BY DBName, Grantee, Action 

DROP TABLE #dbGrant,#tempResults 
+0

'BEGIN'문 다음에 'USE [?]'가 누락 된 것 같습니다. – user2551862

+0

대단히 감사합니다! – user2551862

+0

스토어드 프로 시저가이를 처리 할 때 USE가 필요하지 않습니다. 이것이 도움이 되었다면 답을 수락하는 것을 고려해보십시오. – steoleary