問題來源:最近有同僚需要執行批量删除語句。根據他提供的業務需求,推薦他使用“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可以看出,執行使用者資訊已經被修改。