2011-01-13 67 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時收到此錯誤:子查詢返回多個值。當子查詢遵循=,!=,<, <= , >,> =或當子查詢用作表達式時,這是不允許的。 – mattgcon 2011-01-13 17:18:23