2011-01-13 3 views
0

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

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

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 [email protected] 

    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 

ответ

0

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

0

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

exec @SQL 

в

exec (@SQL) 

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

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

Мне не хватало концевых скобок. Однако я получаю эту ошибку при запуске IPAM_EX_PERMS: Subquery возвращает более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. – mattgcon

Смежные вопросы