SQL Server, как мне запустить динамический оператор - PullRequest
0 голосов
/ 13 января 2011

У меня есть хранимая процедура, которая генерирует сценарии предоставления для каждого разрешения в нашей базе данных. После генерации сценариев грантов мне было интересно, как запустить сценарии автоматически? (Моя цель - создать сценарии, а затем автоматически запускать сценарии)

Вот моя процедура:

 PROCEDURE [dbo].[IPAM_GRANT_DB_PERMS_SCRIPT]
    @GRANTACTION NVARCHAR(20),
    @TYPE NVARCHAR(20),
    @ACTION INT
AS
    DECLARE @SQL NVARCHAR(2000)
BEGIN
    SET @SQL = ''

    SELECT @SQL = (SELECT 'GRANT ' + @GRANTACTION + ' ON ' + 'a.name TO ' + user_name(b.uid) FROM SYSOBJECTS a ,SYSPROTECTS b WHERE a.TYPE IN (@TYPE) AND USER_NAME(b.UID) <> 'public' AND a.NAME NOT LIKE 'dt_%' AND a.ID=b.ID AND ACTION=@ACTION

    EXEC @SQL
    PRINT @SQL
END

А вот что я имел в виду (сработает ли это?)

PROCEDURE IPAM_EX_PERMS
AS
BEGIN
    PRINT '--Initiating DELETE permissions--'
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'DELETE', 'U', 196
    PRINT '--Completed DELETE permissions--'
    PRINT ''
    PRINT ''
    PRINT '--Initiating INSERT permissions--'
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'INSERT', 'U', 195
    PRINT '--Completed INSERT permissions--'
    PRINT ''
    PRINT ''
    PRINT '--Initiating SELECT permissions--'
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'SELECT', 'U', 193
    PRINT '--Completed SELECT permissions--'
    PRINT ''
    PRINT ''
    PRINT '--Initiating UPDATE permissions--'
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'UPDATE', 'U', 197
    PRINT '--Completed UPDATE permissions--'
    PRINT ''
    PRINT ''
    PRINT '--Initiating EXECUTE permissions on Procedures--'
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'EXECUTE', 'P', 224
    PRINT '--Completed EXECUTE permissions on Procedures--'
    PRINT ''
    PRINT ''
    PRINT '--Initiating EXECUTE permissions on Functions--'
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'EXECUTE', 'Fn', 224
    PRINT '--Completed EXECUTE permissions on Functions--'
    PRINT ''
    PRINT ''
    PRINT ''
    PRINT 'Finished processing grant permissions on the IPAM DB' 
END
GO

Ответы [ 2 ]

0 голосов
/ 13 января 2011

Я закрываю этот вопрос из-за того, что было бы излишним запускать этот скрипт в новой базе данных, если в настоящее время не задано разрешение.

0 голосов
/ 13 января 2011

Я думаю, что все должно работать, если вы просто измените

exec @SQL

до

exec (@SQL)

Попробуйте следующий пример, если это не проясняет достаточно:

declare @foo varchar(30)
set @foo = (select 'select 42')
exec (@foo)
...