-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTruncateTableWithExecutePermission.sql
72 lines (55 loc) · 2.38 KB
/
TruncateTableWithExecutePermission.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
CREATE PROCEDURE USP_TRUNCATE_TABLE
(
@TABLENAME NVARCHAR(100),
@ISDEBUG BIT = 0,
@SCHEMA_OWNER NVARCHAR(20) = NULL
)
WITH EXECUTE AS OWNER
/*******************************************************************************************
* PURPOSE : Replace TRUNCATE TABLE Statement without DDL Admin permission within current DB
* Procedure : USP_TRUNCATE_TABLE
********************************************************************************************/
AS
BEGIN
SET NOCOUNT ON
DECLARE @objectName VARCHAR(80)
,@errNumber INT
,@errMessage VARCHAR(4000)
,@sDBName VARCHAR(100)
,@SQLSTRING NVARCHAR(600)
,@fullTableName NVARCHAR(200)
BEGIN TRY
SET @sDBName = DB_NAME();
SELECT @objectName = @sDBName + 'dbo.' + OBJECT_NAME(@@ProcID);
SET @errNumber = 0;
SET @errMessage = '';
IF @SCHEMA_OWNER IS NULL
SET @fullTableName = N'DBO.' + @TABLENAME ;
ELSE
SET @fullTableName = @SCHEMA_OWNER + '.' + @TABLENAME ;
PRINT 'BEFORE TRUNCATE TABLE : ' + @fullTableName ;
SET @SQLSTRING = N'TRUNCATE TABLE ' + @fullTableName ;
IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(@fullTableName) AND TYPE IN(N'U'))
BEGIN
SET @errMessage = 'Invalid table object : ' + @fullTableName;
RAISEERROR(@errMessage, 16, 1);
END
IF @ISDEBUG = 1
BEGIN
PRINT @SQLSTRING;
END
ELSE
BEGIN
EXEC SP_EXECUTESQL @SQLSTRING;
END
PRINT 'AFTER TRUNCATE TABLE : ' + @fullTableName
END TRY
BEGIN CATCH --In case of errors
SELECT @errNumber = ERROR_NUMBER()
,@errMessage = ISNULL(ERROR_MESSAGE(), 'ERRORS : ') + ' ERROR LINE NUMBER : ' + CAST(ERROR_LINE() AS VARCHAR(20)) + ' ERROR NUMBER : ' + CAST(@ERRnUMBER AS VARCHAR(12))
PRINT ' ERROR OCCURED IN SP : ' + @objectName + ' WITH ERROR : + @errMessage
RAISEERROR(@errMessage, 16, 1)
END CATCH
RETURN @errNumber
END
GO