Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL में कस्टम प्राथमिक कुंजी मान बढ़ाना

प्रश्न का समाधान देने से पहले आपके प्रश्न पर कुछ बिंदु:

  1. चूंकि कस्टम प्राथमिक कुंजी में मुख्य रूप से तीन भाग होते हैं दिनांक (140102), वास्तविक स्थान जहां लेनदेन होता है (इकाई आईडी), 4 स्थान संख्या (9999)।
  2. डिजाइन के अनुसार एक ही तारीख को एक ही भौतिक स्थान पर 9999 से अधिक लेन-देन नहीं हो सकते -- माई सॉल्यूशन में भी यही सीमा होगी।

मेरे समाधान पर कुछ बिंदु

  1. चौथे स्थान का अंक उस तिथि से जुड़ा होता है जिसका अर्थ है कि नई तिथि के लिए गिनती 0000 से शुरू होती है। उदाहरण के लिएGI_140102_1_0001,GI_140102_1_0002,GI_140102_1_0003,GI_140103_1_0000,GI_14104_1_0000

किसी भी तरह से यह क्षेत्र अद्वितीय होगा।

  1. समाधान रिकॉर्ड में नवीनतम तिथि की तुलना वर्तमान तिथि से करता है। तर्क:यदि वर्तमान तिथि और रिकॉर्ड में नवीनतम तिथि मेल खाती है, तो यह 4 स्थान अंक को 1 से बढ़ा देता है यदि वर्तमान तिथि और रिकॉर्ड में नवीनतम तिथि मेल नहीं खातायह 4 स्थान अंक को 0000 के मान से सेट करता है।

समाधान:(नीचे दिए गए कोड में वह मान दिया गया है जो अगला GoodsInwardId होगा, अपने समाधान में फिट होने के लिए आवश्यकता के अनुसार इसका उपयोग करें)

declare @previous nvarchar(30);
declare @today nvarchar(30);
declare @newID nvarchar(30);
select @previous=substring(max(GoodsInwardId),4,6) from SC_TD_GoodsInward;
Select @today=RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)
+RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2);

if @[email protected]
BEGIN
Select @newID='GI_'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)
+RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)
+'_'+CONVERT(varchar,1)+'_'+(SELECT RIGHT('0000'+
CONVERT(VARCHAR,CONVERT(INT,RIGHT(MAX(GoodsInwardId),4))+1),4) 
from SC_TD_GoodsInward);
END
else
BEGIN
SET @newID='GI_'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)
+RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)
+'_'+CONVERT(varchar,1)+'_0000';
END
select @newID;

आवश्यक संरचना बनाने के लिए टी-एसक्यूएल (संभावित अनुमान)

टेबल के लिए:

CREATE TABLE [dbo].[SC_TD_GoodsInward](
    [EntityId] [int] NULL,
    [GoodsInwardId] [nvarchar](30) NULL
)

तालिका के लिए नमूना रिकॉर्ड:

insert into dbo.SC_TD_GoodsInward values(1,'GI_140102_1_0000');
insert into dbo.SC_TD_GoodsInward values(1,'GI_140101_1_9999');
insert into dbo.SC_TD_GoodsInward values(1,'GI_140101_1_0001');

**यह आपकी स्थिति में एक संभावित समाधान है, हालांकि सही समाधान यह होगा कि पहचान कॉलम (यदि आवश्यक हो तो शोधित का उपयोग करें) और इसे एक गणना कॉलम के रूप में वर्तमान तिथि के साथ जोड़ दें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DACFx 3.0 API के साथ DACPAC का उन्नयन - किसी मौजूदा डेटाबेस के वर्तमान DAC संस्करण का निरीक्षण कैसे करें?

  2. SQL सर्वर ट्रिगर:समझ और विकल्प

  3. SQL में डायनेमिक क्वेरी में पास कॉमा सेपरेटेड स्ट्रिंग का उपयोग कैसे करें

  4. SQL सर्वर प्रतिस्थापन () बनाम अनुवाद ():अंतर क्या हैं?

  5. वर्तमान पंक्ति मान के साथ चर अद्यतन कर रहा है