-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspGenerateCrud.sql
More file actions
124 lines (104 loc) · 7.2 KB
/
spGenerateCrud.sql
File metadata and controls
124 lines (104 loc) · 7.2 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
CREATE PROCEDURE [dbo].[spGenerateCrud]
@object_id int
AS
DECLARE @ColList nvarchar(1000), @ColVarList nvarchar(1000), @ColVarDeclList nvarchar(1000)
DECLARE @NL nchar(2) = CHAR(13)+CHAR(10)
DECLARE @Tab nchar(1) = CHAR(9)
DECLARE @NT nchar(3) = @NL + @Tab
DECLARE @TableName sysname =
(
SELECT TOP (1) name
FROM sys.tables
WHERE object_id = @object_id
)
DECLARE @Cols dbo.Col
INSERT @Cols
(
Name,
Type,
IsIdentity
)
SELECT C.name,
T.TSQLName,
C.is_identity
FROM sys.all_columns C
CROSS APPLY dbo.[tfnTSQLTypeName](C.object_id, C.column_id) T
WHERE C.object_id = @object_id
SELECT @ColList =
(
SELECT N',' + C.Name
FROM @Cols C
WHERE IsIdentity < 1
FOR XML PATH ('')
)
-- Remove pesky leading comma
SELECT @ColList = dbo.fnRemoveFirstCharacter(@ColList)
-- Format list so each column is tabbed in and on new line.
SELECT @ColList = @Tab + REPLACE(@ColList, N',', N',' + @NT)
SELECT @ColVarList =
(
SELECT N',@' + C.Name
FROM @Cols C
WHERE IsIdentity < 1
FOR XML PATH ('')
)
SELECT @ColVarList = dbo.fnRemoveFirstCharacter(@ColVarList)
-- Format list so each column is tabbed in and on new line.
SELECT @ColVarList = @Tab + REPLACE(@ColVarList, N',', N',' + @NT)
SELECT @ColVarDeclList =
(
SELECT N',@' + C.Name + N' ' + C.Type
FROM @Cols C
WHERE IsIdentity < 1
FOR XML PATH ('')
)
SELECT @ColVarDeclList = dbo.fnRemoveFirstCharacter(@ColVarDeclList)
-- Format list so each column is tabbed in and on new line.
SELECT @ColVarDeclList = @Tab + REPLACE(@ColVarDeclList, N',', N',' + @NT)
-- CREATE SP Text Start ====================================================
DECLARE @SP nvarchar(max) =
N'CREATE PROCEDURE sp' + @TableName + N'Create' + @NL + @ColVarDeclList + @NL + N'AS' + @NL
DECLARE @InsertStmt nvarchar(max) =
N'INSERT INTO ' + @TableName + @NL + N'(' + @NL + @ColList + @NL + N')' +
@NL + N'VALUES' + @NL + N'(' + @NL + @ColVarList + @NL + N');'
SELECT @SP = @SP + @InsertStmt
SELECT @SP
-- CREATE SP Text End ====================================================
DECLARE @IDCol nvarchar(50),
@IDType nvarchar(50),
@IDVar nvarchar(50)
SELECT @IDCol = C.Name,
@IDType = C.Type,
@IDVar = N'@' + C.Name
FROM @Cols C
WHERE IsIdentity = 1
-- Shove our identity onto start of parameter list
SELECT @ColVarDeclList = @Tab + @IDCol + N' ' + @IDType + N',' + @NL + @ColVarDeclList
-- Will take form of col = @col in update statement
DECLARE @UpdateList nvarchar(max)
SELECT @UpdateList =
(
SELECT N',' + C.Name + N' = ' + N'@' + C.Name
FROM @Cols C
FOR XML PATH('')
)
SELECT @UpdateList = dbo.fnRemoveFirstCharacter(@UpdateList)
SELECT @UpdateList = REPLACE(@UpdateList, N',', N',' + @NT)
-- UPDATE SP Text Start ====================================================
SELECT @SP = N'CREATE PROCEDURE sp' + @TableName + N'Update' + @NL + @ColVarDeclList + @NL + N'AS' + @NL
DECLARE @UpdateStmt nvarchar(max) =
N'UPDATE' + @Tab + @TableName + @NL +
N'SET' + @Tab + @UpdateList + @NL +
N'WHERE' + @Tab + @IDCol + N' = ' + @IDVar + N';'
SELECT @SP = @SP + @UpdateStmt
SELECT @SP
PRINT N'Update End'
-- UPDATE SP Text End ====================================================
-- DELETE SP Text Start ====================================================
SELECT @SP = N'CREATE PROCEDURE sp' + @TableName + N'Delete' + @NT + @IDVar + N' ' + @IDType + @NL + N'AS' + @NL
DECLARE @DeleteStmt nvarchar(max) =
N'DELETE' + @Tab + @TableName + @NL +
N'WHERE' + @Tab + @IDCol + N'=' + @IDVar
SELECT @SP = @SP + @DeleteStmt
SELECT @SP
-- DELETE SP Text End ====================================================