-1

Anyone able to convert the following SQL query using sp_MSforeachdb? I am using SQL Server 2005 SP4. Thanks!

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
1
  • "Quel", apparently. But "Quelle" sounds besser, IMHO. Commented Jul 6, 2013 at 15:18

1 Answer 1

1

This should do it:

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
Sign up to request clarification or add additional context in comments.

3 Comments

I believe it is only missing 'USE [?]' after the 'BEGIN' statement.
You don't need USE in this as the stored procedure handles that for you. If this has helped you, please consider accepting the answer.
USE is required. I tested it and without USE, sp_helprotect is run multiple time on the same DB.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.