PDA

View Full Version : ساخت خودکار پروسیجر های insert/update/delete/select برای جداول مورد نیاز



xsbehx
جمعه 28 آذر 1393, 07:02 صبح
سلام چطور می شه یک پروسیجر داشت که با اجرای اون و دادن نام جدول مورد نظر، خودش پروسیجرهای insert,Update,Delete,Select رو براش ایجاد کنه؟ متاسفانه با هر کلید واژه به انگلیسی جست و جو کردم نتونستم چیزی رو که می خوام پیدا کنم.

ham3d1988
جمعه 28 آذر 1393, 17:34 عصر
سلام
این لینک رو ببینید
http://barnamenevis.org/showthread.php?87372-Stored-Procedure-Generator

xsbehx
جمعه 28 آذر 1393, 20:05 عصر
خیلی ممنون بابت لینک ولی من منظورم برنامه خاصی نبود ببینید یکی از دوستان من یک پروسیجر استفاده کرد و یک پارامتر بهش داد بعد اجرا کرد خودش چهار تا پروسجر اصلی insert,Update,Delete,Select اون جدول مورد نظر رو ساخت نه لازم به برنامه خاصیه نه لازم به نوشتن پروسیجرها برای هر جدول فقط اسم پروسیجر بعد نام جدول و بعد F5 بهمین راحتی حالا من با هر کلید واژه ای جست و جو کردم نتونستم چیزی که می خواستم رو پیدا کنم.

مرتضی تقدمی
شنبه 29 آذر 1393, 11:10 صبح
سلام
من اطلاعي از اين اس پي كه گفتيد ندارم ولي ميتونيد از اين اس پي كه خودم نوشتم استفاده كنيد:
ميتونيد كدها رو بهينه تر و كاستومايز هم بكنيد.

alter function Fn_GetColumnsInfo(@TableName nvarchar(50), @Atsign int, @Type int, @IsUpdate int)
returns nvarchar(max)
as
begin
declare @str nvarchar(max)
declare @At nvarchar(1) = '@'

if @Atsign = 0
set @At = ''

if @Type = 1
begin
set @str = (select ',' + @At + COLUMN_NAME + ' ' + CONVERT(nvarchar(20), DATA_TYPE)
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME=@TableName
for xml path(''))
end
else if @Type = 0
begin
set @str = (select ',' + @At + COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME=@TableName
for xml path(''))
end

if @IsUpdate = 1
begin
set @str = ''

set @str = (select ',' + COLUMN_NAME + '=@' + COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME=@TableName
for xml path(''))
end

return STUFF(@str, 1,1,'')
end


alter proc Sp_GenerateSP
@TableName nvarchar(50)
as
begin
declare @q nvarchar(max)

set @q = ('IF (OBJECT_ID(''Sp_'+@TableName+'_Select'') IS NOT NULL) ' +
'DROP PROCEDURE Sp_'+@TableName+'_Select') + CHAR(13)
set @q = @q + ('IF (OBJECT_ID(''Sp_'+@TableName+'_Update'') IS NOT NULL) ' +
'DROP PROCEDURE Sp_'+@TableName+'_Update') + CHAR(13)
set @q = @q + ('IF (OBJECT_ID(''Sp_'+@TableName+'_Insert'') IS NOT NULL) ' +
'DROP PROCEDURE Sp_'+@TableName+'_Insert') + CHAR(13)
set @q = @q + ('IF (OBJECT_ID(''Sp_'+@TableName+'_Delete'') IS NOT NULL) ' +
'DROP PROCEDURE Sp_'+@TableName+'_Delete') + CHAR(13)
exec (@q)

set @q = 'CREATE PROC Sp_'+@TableName+'_Select' + CHAR(13) +
'AS' + CHAR(13) +
'BEGIN' + CHAR(13) +
' SELECT ' + dbo.Fn_GetColumnsInfo(@TableName, 0, 0,0) + '' + CHAR(13) +
' FROM ' + @TableName + '' + CHAR(13) +
' WHERE 1=1 ' + CHAR(13) +
'END'
exec (@q)

set @q = ''
set @q = 'CREATE PROC Sp_'+@TableName+'_Insert' + CHAR(13) +
' ' + dbo.Fn_GetColumnsInfo(@TableName, 1, 1,0) + CHAR(13) +
'AS' + CHAR(13) +
'BEGIN' + CHAR(13) +
' INSERT INTO ' + @TableName +
'(' + dbo.Fn_GetColumnsInfo(@TableName, 0, 0,0) + ')' + CHAR(13) +
' VALUES(' + dbo.Fn_GetColumnsInfo(@TableName, 1, 0,0) + ')' + CHAR(13) +
'END'
exec (@q)

set @q = ''
set @q = 'CREATE PROC Sp_'+@TableName+'_Update' + CHAR(13) +
' ' + dbo.Fn_GetColumnsInfo(@TableName, 1, 1,0) + CHAR(13) +
'AS' + CHAR(13) +
'BEGIN' + CHAR(13) +
' UPDATE ' + @TableName + CHAR(13) +
' SET ' + dbo.Fn_GetColumnsInfo(@TableName, 0, 0,1) + '' + CHAR(13) +
' WHERE 1=2' + CHAR(13) +
'END'
exec (@q)

set @q = ''
set @q = 'CREATE PROC Sp_'+@TableName+'_Delete' + CHAR(13) +
' ' + dbo.Fn_GetColumnsInfo(@TableName, 1, 1,0) + CHAR(13) +
'AS' + CHAR(13) +
'BEGIN' + CHAR(13) +
' DELETE ' + @TableName + CHAR(13) +
REPLACE(' WHERE ' + dbo.Fn_GetColumnsInfo(@TableName, 0, 0,1), ',',' AND ') + CHAR(13) +
'END'
exec (@q)
end

موفق باشيد