الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

How can make procedure with dynamic number of paramters

مغلق
بدأه صاحب همة في 16 أغسطس 2006 · 10 رد · 2,028 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

لدي سؤال وهو أنه هل يمكن عمل procedure بحيث يكون الــParameters التي أمررها Dynamicبحيث ترجع النتيجة (استعلام) حسب الFilters التي أعطيتها للــ Procedure ?

عفوا أقصد بــ Dynamic هو انه ليس كل المتغيرات تعطى قيمة يستعلم بها وتكون جزء من شرط الاستعلام

من لمح فجر الأجر هان عليه ظلام التكليف

#2

بتوقع لترجع نتيجة استعلام لازم تستخدمة Function

سلام

#3

يمكن تمرير جملة SQL كاملة لل Stored Procedure ومن ثم يمكن تنفيذ الجملة.

مثلا:

CREATE PROCEDURE dbo.EXECUTE_SQL 
(
@SQL NVARCHAR(1000)
)
AS
	EXEC(@SQL)
	RETURN

حيث EXEC تقوم يتنفيذ الجملة المطلوبة في زمن التنفيذ.

#4

السلام عليكم أخي الكريم سأعطيك طريقة رائعة استخدمها عادة في قواعد بياناتي التي أنشئها :

بفرض عندنا جدول موظفين مثلاً و فيه الحقول التالية :

id

name

address

و تريد إجرائية مخزنة ديناميكية من أجل البارامترات :

Use Tempdb
Go
Create Table Emp_TB(id bigint identity(1,1) , name Nvarchar(100) , address Nvarchar(200) )
Go

-- إضافة بيانات
Insert Emp_TB(name, address ) Values('samer','Syria')
Insert Emp_TB(name, address ) Values('ameer','Egyot')
Insert Emp_TB(name, address ) Values('imad','Jordan')
Insert Emp_TB(name, address ) Values('hany','KSA')

Go

-- الإجرائية
Alter Proc Emp_Select

  @id   BigInt = Null,
  @name Nvarchar(100) = Null ,
  @address  Nvarchar(200) = Null

AS

 Select * From Emp_TB

  Where 
  (
   (  @id Is Null )
   Or
   ( id = @id  ) And not(@id Is Null)
 )
 And
 (
   (  @name Is Null )
   Or
   ( name= @name ) And not(@name Is Null)
 )
 And
 (
   (  @address Is Null )
   Or
   ( address = @address ) And not(@address Is Null)
 )

/*
  Emp_Select 
	@id =   1
  ----------

  Emp_Select 
	@name = 'ameer'
	----------

  Emp_Select 
	@address = 'KSA'

  ---------
  Emp_Select 
	@id =   1 , 
	@name = 'samer'
  ----------
*/

Go

هناك طريقة أخرى إذا أحببت و هي أن تمرر مصفوفة إلى الإجرائية و إليك رابط الموضوع الذي يتحدث عن ذلك :

استخدام المصفوفات في T-SQL

بالتوفيق أخي الكريم :)

تم تعديل هذه المشاركة بواسطة imadouzoun في 16 أغسطس 2006 في 18:14

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#5

هذا مثال ممتاز

جربة و أدعي لي و للقائمين على المنتدى

Create PROCEDURE ABC_EFG

@A bit,  -- Optional
@B bigint		

AS -- With Option
IF ( (@A= 1) )

	BEGIN select * from Table1 where ( Fld = @B )  
	END

ELSE
	BEGIN select * from Table1 END

End_Section:

GO

تم تعديل هذه المشاركة بواسطة walcom في 4 أبريل 2007 في 12:11 — السبب: إضافة العلامات [sql] و [/sql]

وفوق كل ذي علم عليم

http://www.leaderstechnology.com

-------------------------------

#6

انا محتار لا أدري متى استخدم ال SP والا ADO + DataSet

#7

اخي اذا كان المقصود ب dynamic هو تغير جزء معين من الاستعلام كتغير اسم حقل معين

فمثلا لو كان الاستعلام بشرط معين ك name = ''

وتريد ان يكون هذا الشرط متغير فبدلا من ان يكون الاسم يكو السن age = ''

فالمتغير هنا ليس ما بعد = ولكن هو الحقل ويمكن استبدال كل حقول الجدول في استعلام واحد فاليك هذه الطريقه

نفترض وجود جدول موظفين به الحقول

id,name,age,city

نريد من خلال استعلام واحد ان نبحث عن موظف مره بدلالة رقمه ومره اخري بدلالة اسمه ومره بدلالة سنه وهكذا

create proc search (@a varchar(50), --نرسل به الحقل المراد البحث به
					@b varchar(50))-- قيمة الحقل
as 
begin
exec('select * from table_name where ' + @a + ' like ''' + @b + '''  ')
end
#8

شباب ، في عنا نحنا مشكلة في فهم ما هي الفائدة من SP

هلق الدالة يلي كتبها الأخ Crystal Report

ليست مجدية ، فأنت تقوم بإرسال جملة SQL لكي يقوم الـ SQL SERVER

بعمل EXEC لها أي لم تستفد من SP

الـ SP وضع لكي تكون جملة الإستعلام ثابتة و بالتالي يتم اختصار زمن

التحقق و التحويل ....

سلام

#9
Desigen كتب:
بعمل EXEC لها أي لم تستفد من SP

الـ SP وضع لكي تكون جملة الإستعلام ثابتة و بالتالي يتم اختصار زمن

التحقق و التحويل ....

سلام

اخي سؤال الاخ في اول الموضوع واضح وهو كيف يجعل paramaters متغيره في SP

فالاجابه هي رد علي هذا السؤال

فارجو قبل ان تقوم بالتعليق علي الحلول الموضوعه ان تضع حل لما طرح في السؤال الخاص بالموضوع

#10

معليش أخي ، بدون انفعالات أبدا

الحل كما ورد في مشاركة imadouzoun

سلام

#11

روعة

هذا الموضوع مغلق.

مواضيع مشابهة