• 1401/11/12

نوشتن Procedure پویا :

سلام استاد عزیز:

من می خوام که یک Procedure پویا بنویسم ، یعنی اینکه از یک Procedure برای همه جداول برای اجرای برخی از دستورات تکراری استفاده کنم.

اما متاسفانه در نوشتن این Procedure با مشکل روبه رو شده ام.

اگر در این Procedure از Select استفاده کنم نتیجه همان دستور مورد نظر بر می گردهیعنی دستور در خروجی به عنوان نتیجه نمایش داده می شه.

اما اگر از Exec استفاده کنم مقدار مورد نظر که برای Felter وارد شده رو به عنوان نام ستون قرار می ده و می گه که چنین ستونی با یان نام وجود نداره، خطای 207.

 

 

Use Jamil_LTD_DB;

go

 

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

@QueryString nvarchar(1024)

 

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

 

--Select @QueryString;

Exec (@QueryString);

End

go

 

Exec production.IsExist N'Production.Manufacturers', N'ManufacturerName', N'BMW'

 

پیام خطا  در صورت استفاده از Exec . 

 

Msg 207, Level 16, State 1, Line 26

Invalid column name 'BMW'.

 

Completion time: 2023-02-01T20:37:06.8145876+03:30

 

 

خوشحال می شم اگه منو در نوشتن این دستور یار نمایید.

موفق باشید.

  • 1401/11/12
  • ساعت 23:50

سلام دوست من 

باید در پروسیجری که نوشتید به این نکات توجه کرد 

مانند مثالی که در پایین براتون عنوان کردم به این شکل عمل کنید  

و باید کوئری که می نویسید با یک جدول مقایسه بشه که در هنگام صدازدن متغییر ها به مشکل روبه رو نشید یا باید Select رو براتون به نمایش در بیاره به این مثال توجه کنید 

DECLARE  @SqlQuery AS NVARCHAR(4000)

SET @SqlQuery = 'SELECT * FROM dbo.Employee WHERE EmpId = @EmpId'

    EXECUTE sp_executesql @SqlQuery, N'@EmpId INT', @EmpId =   508 ;

وقتی در داخل پروسیجرتون هیچ جا متغییر ها با جدولی مقایسه نمیشن با خطا روبه رو میشید 

یا باید اون رو به Select تغییر بدید و و فقط Select کوئری رو براتون چاپ کنه


logo-samandehi