ورود

View Full Version : تغییر دادن نام ستون و مقدار آن به صورت پویا در Procedure



voice.of.silence
یک شنبه 09 بهمن 1401, 11:00 صبح
سلام دوستان:


من می خوام تا به صورت پویا Dynamic نام ستون مورد نظر در یک جدول رو در Procedure تغییر بدم و مقدار مورد نظرم رو جستجو کنم.
در Procedure مورد نظر مقدار نام جدول ، نام ستون و مقدار مورد نظر برای جستجو به عنوان ورودی Procedure وارد می شه اما در هنگام اجرا پیام خطا نمایش داده می شه که نام ستون به عنوان نام مقدار ورودی موجود نیست. یعنی اینکه مقدار مورد نظر برای جستجو رو به عنوان نام ستون قرار میده و عملیات با خطا روره رو میشه.
هدف من از نوشتن این Procedure اینه که دیگه نیاز نشه برای هر جدول چنین Procedure تکراری نوشته بشه و با یک دستور برای همه ی جداول استفاده بشه.




Drop Proc if exists production.IsExist;
go


Create Proc production.IsExist
@TableName nvarchar(255),
@ColumnName nvarchar(255),
@InputValue nvarchar(255)


With Encryption
As
Begin
SET NOCOUNT ON;


Declare
@P1 nvarchar(255),
@P2 nvarchar(255),
@P3 nvarchar(255),
@QueryString nvarchar(255)


Set @P1 = N'Select * from ';
Set @P2 = N' Where ';
Set @P3 = N' = ';
Set @QueryString = CONCAT(@P1, @TableName, @P2, @ColumnName, @P3, @InputValue);


Exec (@QueryString);
End
go


Exec production.IsExist N'Production.Manufacturers', N'ManufacturerName', N'BMW'
پیام خطا :






Msg 207, Level 16, State 1, Line 32
Invalid column name 'BMW'.


Completion time: 2023-01-29T11:27:11.6992411+03:30

با سپاس فراوان.
موفق باشید.

masoode
یک شنبه 09 بهمن 1401, 13:50 عصر
به نظرم @InputValue باید در گیومه باشد

voice.of.silence
پنج شنبه 13 بهمن 1401, 15:01 عصر
سلام دوست من:
خیلی ممنون بابت راهنمایی خوب تون.
با گذاشتن N@InputValue' داخل گیومه "N'@InputValue'" در هنگام اجرای Procedure مشکل حل شد و الان باتغییر نام جدول و مقدار مورد نظر به عنوان کلید در جستجو نتیجه مورد نظر حاصل می شه.
موفق باشید.