运行临时表中存储的多个SQL语句

时间:2015-07-24 21:16:41

标签: sql sql-server

我希望能够授予用户对SQL视图中包含的所有表的选择权限。我想要做的就是输入UserID,然后输入View Name,我的脚本将生成并运行一个SQL语句,为该视图使用的每个表授予select访问权限。我有以下内容:

declare @user varchar(40)
declare @view varchar(80)
declare @authcommand table
(authstatement varchar(max), rownum varchar(3))
set @user = 'FMPCO\dbauman'
set @view = 'pvtapvendanalysis'
CREATE TABLE #temp
(NAME VARCHAR(250), [type] VARCHAR(250), updated CHAR(2), selected CHAR(3), [column] VARCHAR(250))
INSERT #temp
EXEC sp_depends @view
insert into @authcommand
SELECT distinct concat('grant select on ', name, ' to ', @user), DENSE_RANK() OVER (ORDER BY name) AS RowNum
FROM #temp t
--select * from @authcommand
exec(@authcommand)
drop TABLE #temp

注释掉的select语句返回预先制作的" grant select"除了每个行号之外,我期望从这个新的临时表中获得的语​​句。现在,我希望能够执行该表中的每个语句。当我运行脚本时,Exec命令会产生错误:

  

必须声明标量变量" @ authcommand"。

我怎样才能更接近能够运行每个"授予选择"存储在这个临时表中的语句?

1 个答案:

答案 0 :(得分:0)

不确定你想做什么,但假设每一行都有一个要执行的语句,这样的事情应该做的工作:

DECLARE @exec NVARCHAR(MAX)
WHILE EXISTS ( SELECT * FROM @authcommand )
BEGIN
    SELECT TOP 1 @exec = authstatement, @rownum = rownum FROM @authcommand
    EXEC(@exec)
    DELETE FROM @authcommand WHERE rownum = @rownum
END