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

open cursor with complicated select statement

مغلق
بدأه dev_a_salah في 15 أكتوبر 2006 · 5 رد · 744 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عاوز اكتب كود يعمل إعلان لكورسر المشكلة ان جملة الselect بتاعة الكورسر جملة معقدة و متكونة على انها string و فى الحالات العادية كنت بعملها تنفيذ بالإستورد بورسيدجر

exec

لكن فى حالة انى اعملها مع الكورسر إزاى هنفذها ؟؟؟

جملة select ----------->

CREATE PROCEDURE SearchUsers 

@firstNameC nvarchar(50),
@lastNameC nvarchar(50),
@nickNameC nvarchar(50),
@emailC nvarchar(50),
@isAnd bit

 AS
declare @previous bit
declare @query nvarchar(4000)



set @previous=0



set @query='declare usersCursor  Cursor
local scroll static
for
select top 20 * from users where '
if(@firstNameC is not null)
begin
set @query=@query+"firstName like '%"+@firstNameC+"%' "
Set @previous=1
end

if(@lastNameC is not null )
begin
	 if(@previous=1) 
	if(@isAnd=1)
		set @query=@query+" and "
		else
 		set @query=@query+ " or "

	 else
		set @previous=1

set @query=@query+ " lastname like '%"+@lastnameC+"%' "   
end

if(@nicknameC is not null )
begin
	 if(@previous=1)
begin 
		  if(@isAnd=1)
		set @query=@query+" and "
		else
 		set @query=@query+ " or "
end
	else
begin
			  set @previous=1
end

set @query=@query+ " nickname like '%"+@nicknameC+"%' "   
end




if(@emailC is not null )
begin
	 if(@previous=1)
		  if(@isAnd=1)
		set @query=@query+" and "
		else
 		set @query=@query+ " or "
	  else
 		 set @previous=1	

set @query=@query+ " email like '%"+@emailC+"%' "   
end

هوا السترود بروسيدجر كدا لم اتنتهى لكن إزاى اكتب جملة الselectt دى داخل جملة إعلان الكورسر

أحمد صلاح

#2

طيب اى حد يعرف طريقة اجعل بيها جملةا لسكويل السابقة هيا الجملة الخاصة بالكورسر ؟؟؟

؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

او إزاى اكتبها باى طريقة تانية او مكمكن انفذها ب sp_executesql ولو ممكن يبقى إزاى

أحمد صلاح

#3

السلام عليكم

هو تعريف الcursor بيكون كده في ابسط حالاته

DECLARE someCur CURSOR FOR

و بعدين تكتب جمله ال select بعد FOR

بس انا مش فهمك اوي

احتمال تقصد كده

set @query=@query+ " email like '%"+@emailC+"%' " 
DECLARE someCur CURSOR FOR @query
#4

بتوقع لا يمكن

لأنك عم تستخدم جمل IF

لكي تبني الإستعلام

سلام

#5
set @query=@query+ " email like '%"+@emailC+"%' " 
DECLARE someCur CURSOR FOR @query

السكويل سيرفر بيعطى رسالة خطأ و ما بيسمح باستعمال متغير فى جملة السكويل بتاعة الكورسر

هوا انا عرفت احل المشكلة بطريقة من اتنين اما عن طريق تنفيذ فتح الكورسر و الداتا اللى انا عاوزها منه عن طريق

sp_executesql

او بردو عن طريق sp_executesql

بس عن طريق جعل الكورسر جلوبال و بالتالى الكويرى اللى هيتنفذ ب sp_executesql هوا المسئول عن تعريف و فتح الكويرى فقط من دون اى عمل عليه و جعل الشغل عليه فى اللإستورد بروسيدجر اللى منادياه

لكن لو اى حد

يعرف طريقة اسهل ياريت يفيدنا

أحمد صلاح

#6

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

شباب هذا مثال بسيط عن مؤشر ديناميكي .. يعني تمرر عبارة الـ Sql كنص كي تشكل منها المؤشر المطلوب ..

عسى أن أكون أصبت في المساعدة .. :)

Use Master
Go
Declare @q Nvarchar(2000) , @OutC Cursor

Set @q = 'Set @C = Cursor STATIC For Select * From sysDataBases
 Where dbid = @dbid
 Open @C
'

exec sp_executesql @q , N'@C Cursor output, @dbid int',
  @OutC output ,@dbid = 2

Fetch Next From @OutC

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة 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

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

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