2012-06-08 138 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