نحوه ایجاد پارامتر پویا در SQL Server به روش Dynamic SQL string

ایجاد Stored procedure با پارامترهای داینامیک

توسط admin | گروه SQL Server | 1399/12/01

نظرات 0

 در این مقاله از سری مقاله های آموزشی SQL Server به نحوه ایجاد یک رویه یا Stored procedure با پارامترهای داینامیک یا پویا می‌پردازیم. مزیت اینگونه از پروسیجر ها در این است که میتوان تعداد زیادی پارامتر ورودی تعریف کرد و به تعداد دلخواه از آنها استفاده کرد. ورود مقدار اولیه در پارامترهای ورودی تماما الزامی نیستند و بسته به نیاز می توان تعدادی از آنها را مقدار دهی کرد و خروجی در صورت وجود واکشی و نمایش داده خواهد شد. بدنه قابل اجرای پروسیجر بر اساس پارامترهای ورودی ایجاد و سپس با استفاده از sp_executesql اجرا می شود.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		A. Najafzadeh(+98)913-125-3620
-- Date:		2021-01-17
-- Description: از این پروسیجر برای نمایش گزارش مرخصیها استفاده می شود
-- =============================================
CREATE   PROCEDURE     [dbo].[SptblAbsentsForReportTotalSum]
	 @DateStartFrom		Date
	,@DateEndTo		Date 
	,@PersonnelID		BIGINT	  = NULL
	,@CompanyID		INT	  = NULL
	,@AbsentTypeID		SMALLINT  = NULL
AS
BEGIN
SET NOCOUNT ON;
	Declare    @Sql               Nvarchar(Max),
		   @Paramlist     Nvarchar(Max),
		   @AllColumn    Nvarchar(max)

set     @Sql = N' SELECT     
					PersonnelID, 
					AbsentTypeID, 
					CompanyID, 
					DiensNummer, 
					VorName, 
					NachName, 
					AbsentDescription, 
					SUM(AbsentDays) AS ToralDays , 
					CompName '

	SET @Sql += N' From  [dbo].[XtblAbresntsForReport]  Where 1 = 1  '
	SET @Sql += N'	and 
							(
								(DateFrom  BETWEEN @DateStartFrom AND @DateEndTo ) OR 
								(DateTo BETWEEN @DateStartFrom AND @DateEndTo) OR 
								(DateFrom  <= @DateStartFrom AND DateTo >= @DateEndTo)
							)			
							  '

	If Not @PersonnelID Is Null 
		Set @Sql += N' And @PersonnelID = PersonnelID '
	If Not @CompanyID Is Null 
		Set @Sql += N' And @CompanyID = CompanyID '
	If Not @AbsentTypeID Is Null 
		Set @Sql += N' And @AbsentTypeID = AbsentTypeID '		
set @Sql += N' GROUP BY PersonnelID, AbsentTypeID, CompanyID, DiensNummer, VorName, NachName, AbsentDescription, CompName   '

	Set @Paramlist = '
                 @DateStartFrom			Date
		,@DateEndTo				Date 
		,@PersonnelID			BIGINT		=	NULL
		,@CompanyID			INT			=	NULL
		,@AbsentTypeID			SMALLINT	=	NULL'

Exec  sp_executesql     @Sql,    @Paramlist,
                                                  @DateStartFrom
		                                 ,@DateEndTo
		                                 ,@PersonnelID
		                                 ,@CompanyID
	               	                         ,@AbsentTypeID		

END

 

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر