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

استخدام WHERE IN داخل Stored Procedure

بدأه محمد فؤاد تركي في 8 أكتوبر 2012 · 25 رد · 1,641 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الزملاء

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

صممت هذا الاجراء البسيط لجلب القيم من خلال الباراميتر 1,10,100,103 لكن الاستعلام لا يقوم بتنفيذ المطلوب

Alter proc AAAA
@itemnumber nvarchar (50)

as
begin
select ItemNumber,Itemname,ItemGroup from Items where ItemNumber IN (@itemnumber)

end

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

السلام عليكم ...

  1. قم بإنشاء الــ function fnSplitter كمايلي :
    CREATE Function fnSplitter (@IDs Varchar(100) )  
    Returns @Tbl_IDs Table  (ID Int)  As  
    
    Begin 
     -- Append comma
     Set @IDs =  @IDs + ',' 
     -- Indexes to keep the position of searching
     Declare @Pos1 Int
     Declare @pos2 Int
    
     -- Start from first character 
     Set @Pos1=1
     Set @Pos2=1
    
     While @Pos1<Len(@IDs)
     Begin
      Set @Pos1 = CharIndex(',',@IDs,@Pos1)
      Insert @Tbl_IDs Select  Cast(Substring(@IDs,@Pos2,@Pos1-@Pos2) As Int)
      -- Go to next non comma character
      Set @Pos2=@Pos1+1
      -- Search from the next charcater
      Set @Pos1 = @Pos1+1
     End 
     Return
    End

  2. و تقوم باستخدامه كمايلي :
    CREATE PROCEDURE spSelectEmployees(@IDs Varchar(100)) AS 
    Select * From employees Where employeeid In (Select ID From fnSplitter(@IDs))
    GO

  3. و الاستدعاء كمايلي :
    Exec spSelectEmployees '1,4,5,7,9'

  4. رابط المصدر .
  5. البعض يستخدم sp_executesql . لكن لا يفضل استخدامها في مثل هكذا حالات .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3
محمد فؤاد تركي كتب:

الاخوة الزملاء

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

صممت هذا الاجراء البسيط لجلب القيم من خلال الباراميتر 1,10,100,103 لكن الاستعلام لا يقوم بتنفيذ المطلوب

Alter proc AAAA
@itemnumber nvarchar (50)

as
begin
select ItemNumber,Itemname,ItemGroup from Items where ItemNumber IN (@itemnumber)

end

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

هناك حلول كثير منها استخدام الـ Table-Valued Parameters و إليك مثال عن هذه الطريقة :

Create Type tbl_IDs as Table( ID int)
go


Create Table Employee(ID int, Name Varchar(25) )
Go


-- Inserting some values

Insert Employee(Id, Name) Values(1, 'Ahmad'), (2, 'Smeer'), (3, 'Hassan'), (4, 'Mohammad')
go

Create Proc Employee_Select

	@EmpIDs tbl_IDs Readonly

As

	Select * From Employee 
		Where ID in (Select ID From @EmpIDs) 

Go


-- Testing the procedure in T-SQL


	-- Step 1: Preparing the table parameter
	Declare @TB  tbl_IDs
	Insert @TB Values(2),(3)

	-- step 2: Passing the parameter to the stored procedure
	exec Employee_Select @TB

go

أما عن كيفية استدعائه في الدوت نت فإليك هذا المثال من مايكروسوفت

http://msdn.microsoft.com/en-us/library/bb675163.aspx

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

حل آخر بسيط و سريع و سهل التطبيق هو استخدام الـ Dynamic SQL كالتالي:

Create proc AAAA
	@itemnumber nvarchar (50)
As
begin

	Declare @SQL Nvarchar(500)

	Set @SQL = 'Select ItemNumber, Itemname, ItemGroup From Items Where ItemNumber IN (' + @itemnumber + ')'

	Exec(@SQL)

end
1

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

#4

بارك الله فيك يا أخي الفاضل حسام وأخي الفاضل imadouzoun

لقد قمت بتعديل الاسكريبت بهذا الحل البسيط وقد ساعدني كثيرا وحقق المطلوب لكن اريد ان اضيف في حالة حقل Grp_Code فارغ ISNULL ترجع لي جميع البيانات

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT     dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM         dbo.Groups INNER JOIN
            dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'
SELECT @SQL = @SQL + ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'

EXECUTE (@SQL)
end

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 8 أكتوبر 2012 في 12:09

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

السلام عليكم ..

بارك الله بك اخي محمد ..

بارك الله بك أخي imadouzoun

+1

اقتباس
لكن اريد ان اضيف في حالة حقل Grp_Code فارغ ISNULL ترجع لي جميع البيانات
في حال لم يكن NULL نضيف الجزء المخصص للــ WHERE و إذا كان NULL لا يتم إضافة الجزء المخصص للــ WHERE و بالتالي يعيد جميع البيانات .

create proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT 	dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM     	dbo.Groups INNER JOIN
        	dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'
IF @Grp_Code IS NOT NULL 
	SELECT @SQL = @SQL + ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'

EXECUTE (@SQL)
end

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

بارك الله فيك يا أخي الفاض حسام

طيب معلش سؤال أخير

لو حبيت أضيف باراميتر جديد كيف اضعة داخل جملة Where مع الشرط السابق علي ان يكون في حالة ايضا فارغ يرجع لي بجميع البيانات

,@ItemNumber nvarchar (50) = null

لقد قمت بتعديل الكود كما يلي لكن لم يعطني النتيجة المطلوبة

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
,@ItemNumber nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT     dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM         dbo.Groups INNER JOIN
            dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'
        IF @Grp_Code IS NOT NULL 
SELECT @SQL = @SQL + ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')
and (@ItemNumber = ItemNumber)'


EXECUTE (@SQL)
end

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7
محمد فؤاد تركي كتب:

بارك الله فيك يا أخي الفاض حسام

طيب معلش سؤال أخير

لو حبيت أضيف باراميتر جديد كيف اضعة داخل جملة Where مع الشرط السابق علي ان يكون في حالة ايضا فارغ يرجع لي بجميع البيانات

,@ItemNumber nvarchar (50) = null

لقد قمت بتعديل الكود كما يلي لكن لم يعطني النتيجة المطلوبة

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
,@ItemNumber nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT     dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM         dbo.Groups INNER JOIN
            dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'
        IF @Grp_Code IS NOT NULL 
SELECT @SQL = @SQL + ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')
and (@ItemNumber = ItemNumber)'


EXECUTE (@SQL)
end

الكود الذي وضعته يحوي مشكلة بسيطة .. و إليك التصحيح :

ALTER proc [dbo].[Rpt_ItemStickerMulti]

	@Grp_Code nvarchar (50) = null,
	@ItemNumber nvarchar (50) = null
As
Begin

	Declare @SQL NVarChar(MAX)

	SET @SQL = ' SELECT     dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
	FROM         dbo.Groups INNER JOIN
				dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

	IF ( @Grp_Code IS NOT NULL ) And ( @ItemNumber IS NOT NULL ) 
		SET @SQL = @SQL + ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +') and (ItemNumber = ' + @ItemNumber + ')'

	-- To check the sql statement you are executing
	Print @SQL

	EXEC (@SQL)

End

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

#8

السلام عليكم ...

أهلا بك أخي محمد ..

  1. أفهم من كلامك أنه لو كان أحد المتحولين NULL أو كلاهما NULL , فإننا سنعيد كل البيانات .
  2. أي نضع الشرط WHERE في حالة أن المتحول الأول ليس NULL و المتحول الثاني ليس NULL أيضا .
  3. ALTER proc [dbo].[Rpt_ItemStickerMulti]
    
    @Grp_Code nvarchar (50) = null
    ,@ItemNumber nvarchar (50) = null
    as
    begin
    Declare @SQL NVarChar(MAX)
    
    SELECT @SQL = ' SELECT 	dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
    FROM 		dbo.Groups INNER JOIN
            	dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'
     IF @Grp_Code IS NOT NULL AND  @ItemNumber IS NOT NULL
    BEGIN
    	SELECT @SQL = @SQL + ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +') AND (ItemNumber = ' + @ItemNumber + ')'
    END
    print @SQL
    
    EXECUTE (@SQL)
    end

  4. استخدمت العبارة
    print @SQL

    كي يطبع لي الاستعلام الذي تم تنفيذه (في التبويب Messages و النتائج في التبويب Results), لأنني أنفذ الــ Procedure من الــ Management Studio , عليك إزالة هذه الجملة في النسخة النهائية .

تعديل :

شكرا للأخ imadouzoun , فلم أرى مشاركتك قبل وضع مشاركتي ...

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 8 أكتوبر 2012 في 13:55

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

بارك الله فيكم ولكن الاستعلام يرجع بجميع البيانات عندما أكتب قيمة (1) في الباراميتر @ItemNumber

والمفروض عندما اضع قيمة في @ItemNumer أو @Grp_Code يسترجع البيانات المحددة فقط بناء علي الشرط وبخلاف ذلك يسترجع الاستعلام جميع البيانات

مرفق الرسالة التي ظهرت في الــ Print

 SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM            dbo.Groups INNER JOIN
                dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup

(103 row(s) affected)

(1 row(s) affected)

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#10

السلام عليكم ...

أخي محمد , ما ذكرته يمكن تحقيقه بمزيج من الــ AND و الــ OR و الأقواس (طبعا) , لكن بما أننا بدأنا بتوليد Dynamic SQL سنكمل بها و يكون الحل كمايلي :

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
,@ItemNumber nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT 	dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM     	dbo.Groups INNER JOIN
        	dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

DECLARE @WHERE_SQL NVarChar(MAX) 
SET @WHERE_SQL = ''
IF (@Grp_Code IS NOT NULL)
	SET @WHERE_SQL = ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'

IF (@ItemNumber IS NOT NULL)
BEGIN
IF (LEN(@WHERE_SQL) = 0) 
	SET @WHERE_SQL = ' WHERE '
ELSE 
	SET @WHERE_SQL = @WHERE_SQL + ' AND '
SET @WHERE_SQL = @WHERE_SQL + '(ItemNumber = ' + @ItemNumber + ')'

END

SET @SQL = @SQL + @WHERE_SQL
print @SQL

EXECUTE (@SQL)
end
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11
محمد فؤاد تركي كتب:

بارك الله فيكم ولكن الاستعلام يرجع بجميع البيانات عندما أكتب قيمة (1) في الباراميتر @ItemNumber

والمفروض عندما اضع قيمة في @ItemNumer أو @Grp_Code يسترجع البيانات المحددة فقط بناء علي الشرط وبخلاف ذلك يسترجع الاستعلام جميع البيانات

مرفق الرسالة التي ظهرت في الــ Print

 SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM            dbo.Groups INNER JOIN
                dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup

(103 row(s) affected)

(1 row(s) affected)

إليك الحل بعد التصحيح و التجريب :)

Alter proc [dbo].[Rpt_ItemStickerMulti]

	@Grp_Code nvarchar (50) = null,
	@ItemNumber nvarchar (50) = null

As

Begin

	Set Concat_Null_Yields_Null on

	Declare @SQL NVarChar(MAX)

	SELECT @SQL = ' SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
	FROM dbo.Groups INNER JOIN  dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

	Declare @Condition1 Nvarchar(100) , @Condition2 Nvarchar(100),
		@AllConditions Nvarchar(Max)

	IF @Grp_Code IS NOT NULL 
		Set @Condition1 = ' ( dbo.Groups.Grp_Code IN ('+ @Grp_Code +')) '

	IF @ItemNumber IS NOT NULL
		Set @Condition2 = ' (ItemNumber in (' + @ItemNumber + ')) '


	Set @AllConditions = @Condition1 

	if(@AllConditions Is Null) 
		Set @AllConditions = @Condition2
	else
	begin
		Set @Condition2 = ' And ' + @Condition2
		Set @AllConditions = @AllConditions + IsNull( @Condition2, '')
	end

	-- Checking the conditions variable
	print @Condition1
	print @Condition2
	Print @AllConditions

	Set @SQL = @SQL + IsNull(@AllConditions,'')

	-- Checking the SQL variable
	Print 'SQL =>' + @SQL

Exec (@SQL)


End

GO

تجريب :)

exec [Rpt_ItemStickerMulti] Null, Null

exec [Rpt_ItemStickerMulti] Null, '1,3,5'
exec [Rpt_ItemStickerMulti] 4, Null

تحياتي

تم تعديل هذه المشاركة بواسطة imadouzoun في 8 أكتوبر 2012 في 15:13

1

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

#12

الله يبارك لك يا أخي الفاضل حسام

الاستعلام اشتغل 100% لكن أكدب عليك اذا قلت لك اني فهمت حاجة من الجزء اللي حضرتك قمت بكتابتة من بعد

 DECLARE @WHERE_SQL NVarChar(MAX)

الي آخر الجملة

ارجو شرح هذه الجزئية قدر المستطاع

وبارك الله فيك علي مجهودك وشرحك الوافي الشافي

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#13

بارك الله فيك imadouzoun

نتيجة الاستعلام

( dbo.Groups.Grp_Code IN (2,3)) 

 ( dbo.Groups.Grp_Code IN (2,3)) 
SQL => SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
        FROM dbo.Groups INNER JOIN  dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup ( dbo.Groups.Grp_Code IN (2,3)) 
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'IN'.

(1 row(s) affected)

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#14
محمد فؤاد تركي كتب:

بارك الله فيك imadouzoun

نتيجة الاستعلام

( dbo.Groups.Grp_Code IN (2,3)) 

 ( dbo.Groups.Grp_Code IN (2,3)) 
SQL => SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
        FROM dbo.Groups INNER JOIN  dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup ( dbo.Groups.Grp_Code IN (2,3)) 
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'IN'.

(1 row(s) affected)

تصحيح .. كنت نسيان الـ Where :)

Alter proc [dbo].[Rpt_ItemStickerMulti]

	@Grp_Code nvarchar (50) = null,
	@ItemNumber nvarchar (50) = null

As

Begin

	Set Concat_Null_Yields_Null on

	Declare @SQL NVarChar(MAX)

	SELECT @SQL = ' SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
	FROM dbo.Groups INNER JOIN  dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

	Declare @Condition1 Nvarchar(100) , @Condition2 Nvarchar(100),
		@AllConditions Nvarchar(Max)

	IF @Grp_Code IS NOT NULL 
		Set @Condition1 = ' ( dbo.Groups.Grp_Code IN ('+ @Grp_Code +')) '

	IF @ItemNumber IS NOT NULL
		Set @Condition2 = ' (ItemNumber in (' + @ItemNumber + ')) '


	Set @AllConditions = @Condition1 

	if(@AllConditions Is Null) 
		Set @AllConditions = @Condition2
	else
	begin
		Set @Condition2 = ' And ' + @Condition2
		Set @AllConditions = @AllConditions + IsNull( @Condition2, '')
	end

	-- Checking the conditions variable
	print @Condition1
	print @Condition2
	Print @AllConditions

	Set @SQL = @SQL + IsNull( ' Where ' + @AllConditions,'')

	-- Checking the SQL variable
	Print 'SQL =>' + @SQL

	--Exec (@SQL)


End

GO

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

#15

السلام عليكم ...

شكرا للأخي imadouzoun على مشاركاتك ...

بارك الله بك أخي محمد ...

اقتباس
ارجو شرح هذه الجزئية قدر المستطاع

  1. المفروض العودة إلى مرجع TSQL كي نعرف الــ Syntax الخاص بهذه اللغة , أي كيف نعرّف المتحول أو كيف نكتب التعليمة الشرطية أو عمليات الإسناد أو .... الخ.
  2. DECLARE @WHERE_SQL NVarChar(MAX)

    التصريح عن متحول نصي سيحوي الجزء الخاص بالــ Where في الاستعلام , طالما أنك عرف الجزء الخاص بالــ SELECT في المتحول @SQL .

  3. SET @WHERE_SQL = ''

    التعليمة SET هي من أجل إسناد قيمة للمتحول , و هنا اسند له قيمة نصية فارغة , (ايضا SELECT التي استخدمتها أنت مع المتحول @SQL تعمل , لكن يفضل استخدام SET طالما لا يوجد استعلام ).

  4. IF (@Grp_Code IS NOT NULL)

    هنا اختبر هل المتحول (@Grp_Code) قيمته ليست NULL

  5.     	SET @WHERE_SQL = ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'

    هذه كتلة تعليمات الــ IF إذا تحقق الشرط (لاحظ لا داعي لــ BEGIN و END لأنه لدينا تعليمة واحدة) و هنا أفوم بإسناد النص الممثل للشرط الأول إلى المتحول WHERE_SQL .

  6. IF (@ItemNumber IS NOT NULL)

    نختبر هل البارمتر الثاني قيمته ليست NULL .

  7. BEGIN

    بداية كتلة تعليمات للــ IF

  8. IF (LEN(@WHERE_SQL) = 0)

    نختبر هل طول النص في المتحول WHERE_SQL مساوي للصفر , (بمعنى أنني أختبر هل قمت بإضافة الشرط الأول له أم لا).

  9.     	SET @WHERE_SQL = ' WHERE '

    في حال كان طول النص مساوي للصفر , يجب إضافة كلمة 'WHERE' حتى نحصل على استعلام صحيح .

  10. ELSE 
        	SET @WHERE_SQL = @WHERE_SQL + ' AND '

    و إلا فطوله ليس صفر و بالتالي تم إضافة الشرط الأول و يجب إضافة 'AND' من أجل إضافة الشرط الثاني .

  11. SET @WHERE_SQL = @WHERE_SQL + '(ItemNumber = ' + @ItemNumber + ')'

    نضيف الشرط الثاني , (لاحظ أن هذا السطر ليس تابعا للــ ELSE بل هو موجود داخل الكتلة BEGIN و END ).

  12. END

    نهاية بلوك تعليمات الـــ IF الذي يختبر هل المتحول ItemNumber ليس له القيمة NULL .

  13. SET @SQL = @SQL + @WHERE_SQL

    نضيف الشرط WHERE للإستعلام ..

  14. ثم نطبع قيمة المتحول SQL و ننفذه .
  15. الفكرة باختصار , لو كان البارمتر الأول ليس فارغا , فإننا نضيف الشرط الأول , و لو كان البارمتر الثاني غير فارغ , نختبر : إذا لم يتم إضافة الشرط الأول عندها يجب إضافة 'WHERE ' و إلا يجب إضافة 'AND ' ثم نضيف الشرط الثاني .

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 8 أكتوبر 2012 في 22:01

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#16

قد يفيدك هذا الموضوع تجاهل الwhere

الرابط الخاص بي

#17

والله يعجز اللسان عن جميع كلمات الشكر يا أخي الفاضل حسام

طيب أنا أريد أن أقوم بتعديل الباراميتر الحالي ليصبح هكذا

,@FItemNumber nvarchar (50) = null
,@TItemNumber nvarchar (50) = null

من كود :: الي كود

وأنا تكون عبارة Where كالتالي

where ISNULL (Items.ItemNumber,Items.ItemNumber) between ISNULL (@FItemNumber,Items.ItemNumber) and ISNULL (@TItemNumber,Items.ItemNumber)

لكن لا أدري ماذا سيكون التعديل

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
,@ItemNumber nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT  dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM            dbo.Groups INNER JOIN
                dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

DECLARE @WHERE_SQL NVarChar(MAX) 
SET @WHERE_SQL = ''
IF (@Grp_Code IS NOT NULL)
        SET @WHERE_SQL = ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'

IF (@ItemNumber IS NOT NULL)
BEGIN
IF (LEN(@WHERE_SQL) = 0) 
        SET @WHERE_SQL = ' WHERE '
ELSE 
        SET @WHERE_SQL = @WHERE_SQL + ' AND '
SET @WHERE_SQL = @WHERE_SQL + '(ItemNumber = ' + @ItemNumber + ')'

END

SET @SQL = @SQL + @WHERE_SQL
print @SQL

EXECUTE (@SQL)
end

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#18

السلام عليكم ...

بارك الله بك أخي محمد , لا شكر على واجب ...

  1. أفهم من كلامك انه أصبح لدينا ثلاثة بارمترات , (Grp_Code , FItemNumber , TItemNumber ).
  2. لكن في حال كان FItemNumber قيمته NULL هل نعيد كل البيانات , أم فقط إذا كانت أصغر من TItemNumber ؟
  3. أيضا ماذا نرجع في حال كان TItemNumber قيمته NULL ..؟
  4. هذا يعتمد على منطق التطبيق الذي تتعامل معه ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#19

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

1- اذا كانت قيمة الباراميتر FItemNumber = NULL يتم ارجاع جميع البيانات

2- اذا كان قيمة الباراميتر TItemNumber = NULL نفس الشيء يتم استرجاع نفس البيان

3- اذا كان قيمة الباراميتر الثالث Grp_Code = NULL نفس الشيء يتم ارجاع جميع البيانات

4- اذا كان الباراميتر FItemNumber = NULL يحتوي علي قيمة يتم استرجاع البيانات بناء علي القيمة المحددة

5 - اذا كان الباراميتر TItemNumber = NULL يحتوي علي قيمة يتم استرجاع البيانات بناء علي القيمة المحددة

6- اذا كانت القيمة تقع Between FItemNumber and TItemNumber يتم استرجاع البيانات التي قد حددتها في جملة Between

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#20

السلام عليكم ..

أخي محمد .. يبدو أننا سنكتب كل الحالات ضمن تعليمات الــ IF بشكل صريح , (و لا مشكلة في ذلك) , أي نختبر هل الأول قيمته NULL و الثاني لا ثم هل الثاني قيمته NULL و الأول لا ثم هل كلاهما ليسا بــ NULL و عند كل حالة نكتب الــ SQL المطلوب ...

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
,@FItemNumber nvarchar (50) = null
,@TItemNumber nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT 	dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM 		dbo.Groups INNER JOIN
        	dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

DECLARE @WHERE_SQL NVarChar(MAX) 
SET @WHERE_SQL = ''
IF (@Grp_Code IS NOT NULL)
	SET @WHERE_SQL = ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'


DECLARE @SQL_BETWEEN NVARCHAR(MAX)
SET @SQL_BETWEEN = ''
IF ((@FItemNumber IS NOT NULL) AND(@TItemNumber IS NOT NULL ))
	SET @SQL_BETWEEN = ' Items.ItemNumber BETWEEN ' + @FItemNumber + ' AND ' + @TItemNumber 
ELSE IF ((@FItemNumber IS NULL) AND(@TItemNumber IS NOT NULL ))
	SET @SQL_BETWEEN = ' Items.ItemNumber = ' + @TItemNumber ;
ELSE IF ((@FItemNumber IS NOT NULL) AND(@TItemNumber IS  NULL ))
	SET @SQL_BETWEEN = ' Items.ItemNumber = ' + @FItemNumber ;

IF (LEN(@SQL_BETWEEN) > 0)
BEGIN
IF (LEN(@WHERE_SQL) = 0) 
	SET @WHERE_SQL = ' WHERE '
ELSE 
	SET @WHERE_SQL = @WHERE_SQL + ' AND '
SET @WHERE_SQL = @WHERE_SQL + @SQL_BETWEEN 

END

SET @SQL = @SQL + @WHERE_SQL
print @SQL

EXECUTE (@SQL)
end

بالتوفيق ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 11 أكتوبر 2012 في 00:17

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#21

أخي الفاضل حسام

كفيت ووفيت

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#22

بالتوفيق أخي محمد ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#23

بارك الله فيك أخي الفاضل حسام

أريد أن أرتب التقرير حسب كود الصنف ترتيبا تصاعديا هكذا ؟؟ لان الترتيب الحالي غير سليم

order by convert(int,itemnumber)

post-46243-035102900 1351662334_thumb.jp

ALTER proc [dbo].[Rpt_ItemStickerMulti]

@Grp_Code nvarchar (50) = null
,@FItemNumber nvarchar (50) = null
,@TItemNumber nvarchar (50) = null
as
begin
Declare @SQL NVarChar(MAX)

SELECT @SQL = ' SELECT  dbo.Groups.Grp_Code,dbo.Items.ItemNumber , dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
FROM            dbo.Groups INNER JOIN
                dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'

DECLARE @WHERE_SQL NVarChar(MAX) 
SET @WHERE_SQL = ''
IF (@Grp_Code IS NOT NULL)
        SET @WHERE_SQL = ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'


DECLARE @SQL_BETWEEN NVARCHAR(MAX)
SET @SQL_BETWEEN = ''
IF ((@FItemNumber IS NOT NULL) AND(@TItemNumber IS NOT NULL ))
        SET @SQL_BETWEEN = ' Items.ItemNumber BETWEEN ' + @FItemNumber + ' AND ' + @TItemNumber 
ELSE IF ((@FItemNumber IS NULL) AND(@TItemNumber IS NOT NULL ))
        SET @SQL_BETWEEN = ' Items.ItemNumber = ' + @TItemNumber ;
ELSE IF ((@FItemNumber IS NOT NULL) AND(@TItemNumber IS  NULL ))
        SET @SQL_BETWEEN = ' Items.ItemNumber = ' + @FItemNumber ;

IF (LEN(@SQL_BETWEEN) > 0)
BEGIN
IF (LEN(@WHERE_SQL) = 0) 
        SET @WHERE_SQL = ' WHERE '
ELSE 
        SET @WHERE_SQL = @WHERE_SQL + ' AND '
SET @WHERE_SQL = @WHERE_SQL + @SQL_BETWEEN 

END

SET @SQL = @SQL + @WHERE_SQL
print @SQL

EXECUTE (@SQL)

end
المرفقات
1.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 31 أكتوبر 2012 في 08:48

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#24

السلام عليكم ..

أهلا بك أخي محمد ...

  1. من أجل الترتيب , فقط قم بالتعديل على السطرالرابع (العد من الأسفل) ليحوي عبارة الــ ORDER BY كمايلي :
    ALTER proc [dbo].[Rpt_ItemStickerMulti]
    
    @Grp_Code nvarchar (50) = null
    ,@FItemNumber nvarchar (50) = null
    ,@TItemNumber nvarchar (50) = null
    as
    begin
    Declare @SQL NVarChar(MAX)
    
    SELECT @SQL = ' SELECT 	dbo.Groups.Grp_Code, dbo.Items.ItemNumber, dbo.Items.ItemName, dbo.Items.ItemGroup, dbo.Items.ItemLocation
    FROM     	dbo.Groups INNER JOIN
            	dbo.Items ON dbo.Groups.Grp_Name = dbo.Items.ItemGroup'
    
    DECLARE @WHERE_SQL NVarChar(MAX) 
    SET @WHERE_SQL = ''
    IF (@Grp_Code IS NOT NULL)
    	SET @WHERE_SQL = ' WHERE dbo.Groups.Grp_Code IN ('+ @Grp_Code +')'
    
    --IF (@FItemNumber IS NOT NULL)
    DECLARE @SQL_BETWEEN NVARCHAR(MAX)
    SET @SQL_BETWEEN = ''
    IF ((@FItemNumber IS NOT NULL) AND(@TItemNumber IS NOT NULL ))
    	SET @SQL_BETWEEN = ' Items.ItemNumber BETWEEN ' + @FItemNumber + ' AND ' + @TItemNumber 
    ELSE IF ((@FItemNumber IS NULL) AND(@TItemNumber IS NOT NULL ))
    	SET @SQL_BETWEEN = ' Items.ItemNumber = ' + @TItemNumber ;
    ELSE IF ((@FItemNumber IS NOT NULL) AND(@TItemNumber IS  NULL ))
    	SET @SQL_BETWEEN = ' Items.ItemNumber = ' + @FItemNumber ;
    
    IF (LEN(@SQL_BETWEEN) > 0)
    BEGIN
    IF (LEN(@WHERE_SQL) = 0) 
    	SET @WHERE_SQL = ' WHERE '
    ELSE 
    	SET @WHERE_SQL = @WHERE_SQL + ' AND '
    SET @WHERE_SQL = @WHERE_SQL + @SQL_BETWEEN 
    
    END
    
    SET @SQL = @SQL + @WHERE_SQL + ' ORDER BY  convert(int,itemnumber)'
    print @SQL
    
    EXECUTE (@SQL)
    end

  2. أخي محمد , أليس من الأفضل أن نضع نوع البيانات Int أو BigInt للحقول الرقمية بدلا من nchar حيث (بشرط أن يكون منطق التطبيق لا يسمح أن تحوي هذه الحقول على قيم نصية) ..و الفائدة من ذلك هي تقليل حجم قاعدة البيانات مثلا الـ (10) nchar يحجز مساحة 10 بايت من أجل عشر خانات بينما الـــ Int يحجز 4 بايت من أجل القيم
    int   4 Bytes  from -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647)

    و لدينا :

    bigint            8 Bytes   from -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807)

    رابط رابط أخر

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#25

بارك الله فيك أخي الفاضل حسام

نوع بيانات حقل كود الصنف Nvarchar والغرض من اختياري لهذا النوع انه في بعض الاحيان يحتاج المستخدم كتابة حروف مع الارقام داخل حقل كود الصنف وعندما اريد ان أحول نوع البيانات استعمل الدالة convert

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 31 أكتوبر 2012 في 11:30

certifiedj.jpg

 

 

Image Hosted by ImageShack.us

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