問題來源:最近有同事需要執行批量刪除語句。根據他提供的業務需求,推薦他使用“TRUNCATE TABLE”語句。但使用該語句需要 ALTER許可權,這與執行用戶的角色不符。 解決辦法:使用EXECUTE AS語句修改執行許可權。代碼如下: 通過列印出來的loginame可以看出,執行用戶信息已經被修改。 ...
問題來源:最近有同事需要執行批量刪除語句。根據他提供的業務需求,推薦他使用“TRUNCATE TABLE”語句。但使用該語句需要 ALTER許可權,這與執行用戶的角色不符。
解決辦法:使用EXECUTE AS語句修改執行許可權。代碼如下:
ALTER PROCEDURE [dbo].[sp_TruncateTable] @TableName varchar(200) WITH EXECUTE AS SELF AS BEGIN --列印出當前執行上下文用戶 SELECT nt_username, loginame FROM sys.sysprocesses WHERE spid = @@SPID SET NOCOUNT ON; DECLARE @TruncateSql nvarchar(2000); SET @TruncateSql = 'TRUNCATE TABLE ' + @TableName EXEC (@TruncateSql) END
通過列印出來的loginame可以看出,執行用戶信息已經被修改。