PDA

View Full Version : سوال: یک فيلد Rec_No در بانك SQL SERVER 2000 دارم و می خواهم اين فيلد شماره ركوردهای بانک باشد



ali_abbasi22145
چهارشنبه 26 تیر 1387, 13:41 عصر
سلام

من يك فيلد Rec_No در بانك SQL SERVER 2000 دارم و می خواهم اين فيلد Rec_No من شماره ركوردهای بانک ( Record Number ) باشد یعنی با شماره رکوردها پرکنم ، اسكريپتي كه در SQL Qurey Analyser بايد بنويسم چيست تا این کار را انجام دهد؟

SYNDROME
چهارشنبه 26 تیر 1387, 21:21 عصر
سلام

من يك فيلد Rec_No در بانك SQL SERVER 2000 دارم و می خواهم اين فيلد Rec_No من شماره ركوردهای بانک ( Record Number ) باشد یعنی با شماره رکوردها پرکنم ، اسكريپتي كه در SQL Qurey Analyser بايد بنويسم چيست تا این کار را انجام دهد؟
می توانید با همان تابعCount تعداد رکوردها را به دست بیاورید و در بانک ذخیره کنید.
فقط به یک نکته توجه کنید در زمان حطف یک رکورد ، رکوردهای بالای آن باید یک واحد کم شود.
موفق باشید

ali_abbasi22145
شنبه 29 تیر 1387, 14:30 عصر
سلام
من مي خواهم فيلد Rec_No براي ركورد اول 1 ركورد دوم 2 ركورد سوم 3 .... ركورد n ام با n پر شود و تعداد ركوردها بانك را نمي خواهم بشمارم.

ASKaffash
شنبه 29 تیر 1387, 15:20 عصر
سلام
من مي خواهم فيلد Rec_No براي ركورد اول 1 ركورد دوم 2 ركورد سوم 3 .... ركورد n ام با n پر شود و تعداد ركوردها بانك را نمي خواهم بشمارم.
سلام
دوست من اگر منظورت ایجاد یک شماره سریال با فرض از بین رفتن اعداد میانی آن در حذفهای آتی اینطوری است.


Select Max(Field)+1 From Table

ولی خودت میدانی که حذف رکورد و اعمال شرط و دستور order by تمام محاسبات شما را برهم میزند پس اگر یک شماره ردیف میخواهی این مقاله را از پست 9 به دقت بخوان:
http://barnamenevis.org/forum/%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-sql-server/109628-%DA%AF%D8%B1%D8%AF%D8%B4-%D8%AA%D8%AC%D9%85%DB%8C%D8%B9%DB%8C-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-%D8%B9%D8%AF%D8%AF%DB%8C.html

ali_abbasi22145
شنبه 29 تیر 1387, 16:18 عصر
سلام
اينهم كه ماكزيمم را مي دهد و چيزي كه من مي خواهم انجام نمي دهد!
واقعا دستوري براي شماره ركورد در SQL نيست؟

ASKaffash
یک شنبه 30 تیر 1387, 10:06 صبح
سلام
این شکل را استفاده کن :


Select Row_Number() Over(OrderBy YourPK),* From YourTable

ali_abbasi22145
یک شنبه 30 تیر 1387, 14:57 عصر
سلام
این شکل را استفاده کن :


Select Row_Number() Over(OrderBy YourPK),* From YourTable


سلام
كد شما خطا مي دهد.
من همانطور كه در شكل زير مي بينيد را مي خواهم.

بهنام بهمنی
یک شنبه 30 تیر 1387, 17:06 عصر
شما مي خواهيد در جدول ذخيره شود و يا نه؟
اگر مي خواهيد ذخيره شود همانطوري كه دوستان گفته كند
اگر نم خواهيد و زمان نمايش مي خوايد توليد شود از cursor استفاده كنيد

ali_abbasi22145
دوشنبه 31 تیر 1387, 11:52 صبح
سلام و تشكر از پيگيري تان

>>شما مي خواهيد در جدول ذخيره شود و يا نه؟
بله ، جدول ذخيره شود
>>اگر مي خواهيد ذخيره شود همانطوري كه دوستان گفته كند
گفتم كه: كد ايشان خطا مي دهد.

ASKaffash
دوشنبه 31 تیر 1387, 12:28 عصر
سلام
كد شما خطا مي دهد.
من همانطور كه در شكل زير مي بينيد را مي خواهم.

سلام
دوست عزیز این کد را در 2005 تست کردم و برایتان قرار دادم اگر از 2000 استفاده میکنید این تابع و روش حتما خطا میدهد(مال 2000 نیست و دستور جدید 2005 است)
در خصوص 2000 جواب در مقاله ارائه شده است

ali_abbasi22145
سه شنبه 01 مرداد 1387, 12:56 عصر
سلام

من كد مقاله را اجرا كردم خطاي زير را داد:
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'Master.dbo.SohID'.

-------------------------------------------
Declare @MyID TinyInt
Set @MyID=Master.dbo.SohID( )
Select master.dbo.SohCnt(@MyID) As Row, *
From cardtable
Where sicard < > 0
Order By siCardFormat , sicard
Option (Fast 1)
------------------------------------------

بهنام بهمنی
سه شنبه 01 مرداد 1387, 18:02 عصر
در كد دوستمان Order by به هم چسبيده وگرنه مشكلي ندارد
كلمات PK و tblname جايگزين شود

Select Row_Number() Over(Order By PK),* From tblname

shadi.alizadeh
چهارشنبه 02 مرداد 1387, 11:29 صبح
من یک راه ساده پیشنهاد میکنم البته اگه درست منظورتون رو متوجه شده باشم
شما یک فیلد از نوع int در نظر بگیرید و allow nullاش را بردارید که نشه خالی گذاشت.
بعد در قسمت پایین در design جدول تعیین کنید که یک واحد یک واحد به فیلد اضافه بشه با خصوصیت replication
بعد خصوصیت پایینی آن را که اسمش یادم نیست رو باد yes کنید
با این کار به ترتیب رکورد ها از یک تا n پر می شوند.
حتی اگه در هنگام پر کردن جدول این فیلد رو یادتون بره پرش کنید خودش با توجه به شماره رکورد قبلی یه شماره جلوتر رو به این رکورد میده چون تعیین کردیم که یک واحد یک واحد جلو بره.

ali_abbasi22145
چهارشنبه 02 مرداد 1387, 15:03 عصر
در كد دوستمان Order by به هم چسبيده وگرنه مشكلي ندارد
كلمات PK و tblname جايگزين شود

Select Row_Number() Over(Order By PK),* From tblname


سلام
نه دوست من دستور SQL 2005 است

ali_abbasi22145
چهارشنبه 02 مرداد 1387, 15:07 عصر
من یک راه ساده پیشنهاد میکنم البته اگه درست منظورتون رو متوجه شده باشم
شما یک فیلد از نوع int در نظر بگیرید و allow nullاش را بردارید که نشه خالی گذاشت.
بعد در قسمت پایین در design جدول تعیین کنید که یک واحد یک واحد به فیلد اضافه بشه با خصوصیت replication
بعد خصوصیت پایینی آن را که اسمش یادم نیست رو باد yes کنید
با این کار به ترتیب رکورد ها از یک تا n پر می شوند.
حتی اگه در هنگام پر کردن جدول این فیلد رو یادتون بره پرش کنید خودش با توجه به شماره رکورد قبلی یه شماره جلوتر رو به این رکورد میده چون تعیین کردیم که یک واحد یک واحد جلو بره.

سلام
از قسمت replication به بعد را متوجه نشدم اگه ميشه يك PrintScreen از كارتان اينجا بگذاريد.

ASKaffash
چهارشنبه 02 مرداد 1387, 17:01 عصر
سلام

من كد مقاله را اجرا كردم خطاي زير را داد:
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'Master.dbo.SohID'.

-------------------------------------------
Declare @MyID TinyInt
Set @MyID=Master.dbo.SohID( )
Select master.dbo.SohCnt(@MyID) As Row, *
From cardtable
Where sicard < > 0
Order By siCardFormat , sicard
Option (Fast 1)
------------------------------------------

سلام
آیا شما آن DLL را با VC++ ایجاد کرده اید :

ali_abbasi22145
پنج شنبه 03 مرداد 1387, 11:44 صبح
سلام
آیا شما آن DLL را با VC++ ایجاد کرده اید :

سلام
من با دلفي كار مي كنم و VC++ را نمي دانم

ali_abbasi22145
یک شنبه 06 مرداد 1387, 11:02 صبح
كسي نيست مشكل را حل كند؟

payam_igi
جمعه 25 مرداد 1387, 02:28 صبح
از TempTable با فيلد Indentiy استفاده كن.هر بار كه insert يا Delete ميكني temp tablo رو بساز از Table اصلي select بزن و فيلد دئم TempTable رو با كليد جدولت پر كن بعد با Update جدول اول بر اساس كليد از روي TempTable مقدار recno رو بروزرساني كن