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

identity in varchar column

مغلق
بدأه yasirhantoush في 27 مارس 2005 · 8 رد · 4,605 مشاهدة · في أرشيف قسم SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ارجوكم ساعدوني ،، اريد ان استعمل ال identity مع ال varchar column

اريد ان اصنع جدول طلاب (students) به column من النوع varchar و يكون هذا الكولمن priary key , و ايضا auto increment

بحثت عن الموضوع لكن وجدت ال identity لا تتعامل مع ال varchar

مثلا يكون الجدول كالتالي

id name

_______________________

STD0001 mohamed

STD0002 Ahmed

STD0003 Abdo

حيث يكون ال id autoincrement

اظن ان الحل عن طريق استخدام procedure او trigger و لكن خبرتي ضعيفة

ارجوووووووووووووووكم المساعدة

#2

بسم الله الرحمن الرحيم

السلام عليكم

سؤالك حلو ولذيذ وانا أحب الأسئلة دي :)

أولا نحن نتفق أن ال varchar لا يمكن أن يكون identity لذلك سألجأ في حلي إلى الحيلة

دعنا نفترض أن لدينا جدول اسمه tbl_students وهذا الجدول يحتوي على اسم الطالب student_name من النوع varchar وحجمه 50 مثلاً وأيضاً سنضيف حقلين آخرين الأول نسميه id ، ونجعله identity ولكن لاحظ أنه ليس المفتاح الأساسي PK ، والحقل الآخر نسميه مثلاً var_id ونجعله المفتاح الأساسي وحجمه مثلاً 20 الآن نفذنا جزء من الحيلة :)

نأتي للجزء الآخر وهو إنشاء stored procedure وظيفته عمل insert أو إدخال لسجل جديد في هذا الجدول سنكتب فيه الكود الآتي :

CREATE PROCEDURE prc_tbl_students_ins
(
@id int =null output,
@var_id varchar(20),
@student_name varchar(50)
)
As
BEGIN
        SET @var_id ='STD000' +  @@identity 
	INSERT
	INTO [tbl_students]
	(
[var_id],
[student_name]
	)
	VALUES
	(
@var_id,
@student_name
	)
             set @id = @@identity

End
GO

هل لاحظت الحيلة ؟؟

نعم نقوم بأتمتة عملية إنشاء المفتاح الأساسي بحيث يعتمد على ال identity بالنسبة للجدول ثم نضيف عليه الرموز التي تناسبنا مثل "STD000" في حالتنا هذه ..

أرجو ان أكون ساهمت في مساعدتك ، وإن كنت أظن أن هناك حلولاً أخرى من خلال كود البرنامج مثلاً ..

بالمناسبة هذا الكود وليد اللحظة أي أنني لم أجربه ويحتمل الصواب والخطأ ولكنه ما حضر في ذهني الآن ، وقد يكون بداية خيط لك ..

وفقك الله تعالى للخير والهدى

#3

ربما تحتاج لأن تجعل السطر التالي

@var_id varchar(20)

هكذا

@var_id varchar(20) =null output

أظن انه هكذا سيكون صحيح إن شاء الله تعالى

#4

اشكرك بشده يا محمد

تستاهل وسام الجدارة بحق

انا ايضا جاءتني فكرة منك

(لو لا انت لما جاءتني الفكرة)

و هي باستخدام ال default

و ايضا لا تحتاج الى procedure

و بدلا من ذلك ، تستخدم الدالة IDENT_CUUR('table Name و التي ترجع اخر قيمة لل ident و من ثم يتم تحويلها الي varchar و اضافتها لل STD وضعها في ال default

create table [tbl_students]
(
	[std_id] int IDENTITY(1,1),
	[var_id] varchar (20) default 'STD' + CAST(IDENT_CURRENT('tbl_students') AS VARCHAR),
	[student_name] varchar (50)
)
go

insert into tbl_students(student_name) values('mohammed')
select * from tbl_students

ولكن هنالك بعض المشاكل ،، انه ما زال يوجد العمود std_id ، الخطوة القادمة ان نلغيه

ثم اود ان استفسر

ما هي الطريقة التي يتم بها عمل فورمات لل integers

مثلا الرقم 12 يظهر بالشكل 0012

مرة اخري اشكرك

#5

الشكر لله تعالى والفضل له وحده سبحانه علينا جميعاً

:)

جزاك الله خيراً ، وبالفعل الدالة IDENT_CURRENT دالة رائعة ولقد قمت من قبل بشرح الفرق بيناها وبين مثيلاتها في موضوع ما ..

المهم حلك جميل جداً فعلاً وأرجو أن تكون قمت بتجربته وأن يكون نجح مع التذكيربأنه من الضروري أن تجعل ال var_id هو المتاح الأساسي وليس ال id

أما موضوع الاستغناء عن ال id :) فطبعاً طالما نستخدم إحدى دوال ال identitiy فهذا غير ممكن ..

ومسألة الفورمات فانا عن نفسي أستخدمها من داخل البرنامج

#6

السلام عليكم جميعاً :

و كـــــــــــــل عـــــــــام و أنتــــــــم بخيــــر

في ما يخص الموضوع الذي طرحه الأخ yasirhantoush : في مشاركته

identity in varchar column, please , help me , am stuck

الأستاذ محمد النحراوي مع احترامي الشديد لك .. الكود الذي قدمته غير دقيق..

يوجد سطر واحد فقط منه ليس على صواب : وهو

 SET @var_id ='STD000' +  @@identity

الصواب :

 SET @var_id ='STD000' +  Ident_Current('tbl_students')

والباقي من الكود 100% تمام جزاك الله كل الخير ... أخ محمد على المبادرة

After an INSERT, SELECT INTO, or bulk copy statement completes, 
@@IDENTITY contains the last identity value generated by the statement. 
If the statement did not affect any tables with identity columns,@@IDENTITY returns NULL. 
If multiple rows are inserted, generating multiple identity values, 
@@IDENTITY returns the last identity value generated. 
If the statement fires one or more triggers that perform inserts that generate identity values, 
calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. 
The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, 
or if the transaction is rolled back.
@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions in that they return the last value inserted into the IDENTITY column of a table.

من Transact_Sql Help ......

أما الأخ yasirhantoush أيضاً الكود الذي قدمته فهو ممتاز لكن ينقصه استمرار وجود الحقل ID من نوع int ..

لذلك أحببت أن أشارك في حل المسألة .................

أولاً : إنشاء الجدول ..

create table [Students_TB]
(
 [StdID] varchar (20),
 [StdName] varchar (50)
)

--ثانياً : إنشاء هالإجراء لإدخال السجل ..

create Proc Students_Insert 
  @StdName varchar(50)
as
  declare @NewID as varchar(20)
  select  @NewID = Max(substring(cast(Students_TB.StdID as varchar),6,len(Students_TB.StdID)))-- as varchar(20))
  from  Students_TB
 If(@NewID IS Null)
   set @NewID = 'STD000' 
 else
   set @NewID = 'STD00' + cast( (cast(@NewID as Integer)+ 1) as varchar(20))
 Insert Into Students_TB(StdID , StdName) values(@NewId , 'Student Ahmad')
go

إختبار الإدخال :

exec Students_Insert 
  @StdName = 'ahmad'

select * from Students_TB

المبرمج عماد ... B) B)

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

#7

السلام عليكم

بلنسبة لى مشاركة الاخ محمد

اقتباس
بالمناسبة هذا الكود وليد اللحظة أي أنني لم أجربه ويحتمل الصواب والخطأ ولكنه ما حضر في ذهني الآن ، وقد يكون بداية خيط لك 

وتم تعديل الكود فى نفس الموضوع

اقتباس
  create table [tbl_students]

(

[std_id] int IDENTITY(1,1),

[var_id] varchar (20) default 'STD' + CAST(IDENT_CURRENT('tbl_students') AS VARCHAR),

[student_name] varchar (50)

)

go

insert into tbl_students(student_name) values('mohammed')

select * from tbl_students   

ملحوظة يمكن عمل الكود السابق الخاص بى الاخ محمد فى سطر واحد فقط عن طريق Fromula

المبرمج محمد الفريق العربى للبرمجة :D

كل عام وانت بخير يا اخ عماد

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#8

السلام عليكم waleedhm لم يكن هدفي إنقاص حجم مشاركة الأستاذ الكبير محمد.. بل على العكس كان الهدف إضاءة بسيطة على

المشكلة ووضع حل أي إيجاد حل لإستمرار وجود حقل الترقيم التلقائي ....

و هذا كل شيء و كثر الله من أمثال الأخ محمد النحراوي المعروف بمشاركاته القوية والفعالة ....

المبرمج عماد ... B) B)

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

#9

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

يا إخوان اكتشفت خطأ بسيط بالاجراء وهذا تعديله ........

Alter Proc Students_Insert 
  @StdName varchar(50)
as

declare @NewID as varchar(20)
select @NewID = Cast(Max(cast(substring(cast(Students_TB.StdID as varchar),6,len(Students_TB.StdID)) as int)) as varchar(20))
  from  Students_TB

If(@NewID IS Null)
  set @NewID = 'STD000' 
Else
  set @NewID = 'STD00' + cast( (cast(@NewID as Integer)+ 1) as varchar(20))

print @NewID
  Insert Into Students_TB(StdID , StdName) values(@NewId , 'Student Ahmad')

Go

المبرمج عماد ... B) B)

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

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

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