2012-06-08 133 views
2

我有这个疑问如何运行一组选择查询?

SELECT 'GRANT SELECT ON ' + TABLE_NAME + ' TO '+ @UserName 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' AND 
TABLE_NAME LIKE 'aspnet%' 

和结果是这样的:

GRANT SELECT ON aspnet_Applications TO user04 
GRANT SELECT ON aspnet_Membership TO user04 
GRANT SELECT ON aspnet_Paths TO user04 
GRANT SELECT ON aspnet_PersonalizationAllUsers TO user04 
GRANT SELECT ON aspnet_PersonalizationPerUser TO user04 
GRANT SELECT ON aspnet_Profile TO user04 
GRANT SELECT ON aspnet_Roles TO user04 
GRANT SELECT ON aspnet_SchemaVersions TO user04 

我想运行的所有选择查询的这个结果。我怎样才能做到这一点?

+4

复制并运行它? – Oded

+2

[sp_executesql?](http://msdn.microsoft.com/zh-cn/library/ms188001.aspx) – Bridge

回答

1
DECLARE @Sql NVARCHAR(MAX) 
SET @Sql = '' 

SELECT @Sql = @Sql + 'GRANT SELECT ON ' + TABLE_NAME + ' TO '+ @UserName + ' 
' -- Newline to keep statements from being just one long line. 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' AND 
TABLE_NAME LIKE 'aspnet%' 

-- Print it first to double-check that it looks right before running. 
PRINT @Sql 

-- After you've validated it with print, run it. 
EXEC sp_executeSql @Sql 
+0

它不起作用。错误:GRANT SELECT on aspnet_Applications TO user04GRANT SELECT ON aspnet_Membership TO user04GRANT SELECT ON aspnet_Paths TO user04GRANT SELECT ON aspnet_PersonalizationAllUsers TO user04GRANT SELECT ON aspnet_PersonalizationPerUser TO user04GRANT SELECT ON aspnet_Profile TO user04GRANT SELECT ON aspnet_Roles TO user04GRANT SELECT ON aspnet_SchemaVersions TO user04GRANT SELECT ON aspnet_Users TO user04GRANT SELECT ON aspnet_UsersInRoles TO user04GRANT SELECT ON aspnet_WebEvent_Events TO user04 Msg 156,Level 15,State 1,Line 1 关键字'ON'附近的语法不正确。 –

+0

您没有包含换行符。 –

0

我知道了,记得在GRANT之前有个空格。

DECLARE @Sql NVARCHAR(MAX) 
SET @Sql = '' 
SELECT @Sql [email protected] + ' GRANT SELECT ON ' + TABLE_NAME + ' TO '+ @UserName +'' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' AND 
TABLE_NAME LIKE 'aspnet%' 
PRINT @Sql 
EXEC sp_executeSql @Sql