Esta es el arreglo más válida que te podemos aportar, sin embargo estúdiala detenidamente y analiza si se puede adaptar a tu trabajo.
Solución:
El mejor lugar para buscar esta información es en libros en línea. el artículo sobre TRUNCATE TABLE
aquí indica:
El permiso mínimo requerido es ALTER en table_name. Los permisos TRUNCATE TABLE son predeterminados para el propietario de la tabla, los miembros de la función fija del servidor sysadmin y las funciones fijas de la base de datos db_owner y db_ddladmin, y no son transferibles. Sin embargo, puede incorporar la instrucción TRUNCATE TABLE dentro de un módulo, como un procedimiento almacenado, y otorgar los permisos apropiados al módulo mediante la cláusula EXECUTE AS.
Entonces ALTER son los permisos mínimos requeridos. Puede obtenerlo como propietario de base de datos, puede obtenerlo como DB_DDLAdmin. O simplemente otorgar alter.
Si piensa en lo que hace truncar y cómo funciona, esto tiene sentido, es un comando bastante “severo” y vacía la tabla de datos y lo hace rápidamente.
Según esta referencia en BOL:
El permiso mínimo requerido es ALTERAR en table_name. TRUNCATE TABLE permisos por defecto a la dueño de la mesaLos miembros de la administrador de sistemas rol de servidor fijo, y el db_propietario y db_ddladmin roles de base de datos fijos y no son transferibles. Sin embargo, puede incorporar la instrucción TRUNCATE TABLE dentro de un módulo, como un procedimiento almacenado, y otorgar los permisos apropiados al módulo mediante la cláusula EXECUTE AS.
Puede crear un procedimiento almacenado con ejecutar como propietario para una sola tabla o un procedimiento almacenado para cualquier tabla. En el siguiente código se almacena el procedimiento para truncar cualquier tabla sin asignar el permiso de db_owner
u otro:
USE [database name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Yimy Orley Asprilla
-- Create date: Julio 16 de 2014
-- Description: Función para hacer TRUNCATE a una tabla.
-- =============================================
ALTER PROCEDURE [dbo].[spTruncate]
@nameTable varchar(60)
WITH EXECUTE AS OWNER
AS
SET NOCOUNT OFF;
DECLARE @QUERY NVARCHAR(200);
SET @QUERY = N'TRUNCATE TABLE ' + @nameTable + ';'
EXECUTE sp_executesql @QUERY;