मैं एक स्तंभ के साथ एक तालिका कैसे बना सकता हूं जो अनुक्रम का उपयोग करता है?


10

मेरे पास निम्नलिखित है

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL,
    [Title] [nvarchar](64) NOT NULL
)

CREATE SEQUENCE MyTableID
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

मैं MyTable पर नए रिकॉर्ड सम्मिलित करना चाहता हूं और अनुक्रम के अगले मूल्य पर आईडी सेट करता हूं। मैं यह कैसे कर सकता हूं? एक ट्रिगर शायद, या कोई और तरीका है? कैसे?

जैसा कि मैं SQL सर्वर 2012 का उपयोग कर रहा हूं , मैं गैप बग के कारण आइडेंटिटी का उपयोग नहीं करना चाहता

जवाबों:


16

इसे कॉलम के लिए डिफ़ॉल्ट संपत्ति के रूप में असाइन करें

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title] [nvarchar](64) NOT NULL
);

भविष्य के पाठकों, एक अनुक्रम में अंतर हो सकता है यदि सेवा अप्रत्याशित रूप से बंद हो जाती है, तो सीएसीएचई में संस्थाओं का मूल्य खो सकता है। यहाँ, वे no cacheअनुक्रम ऑब्जेक्ट के लिए धीमे प्रदर्शन के ट्रेडऑफ़ के साथ इसे कम करने के लिए निर्दिष्ट कर रहे हैं ।

संदर्भ संदर्भ बनाएँ


क्या cacheइस मामले में उपयोग करना सुरक्षित है ? कनेक्ट लिंक पर Microsoft हमें उपयोग करने के लिए कहता है no cache
ब्रूनोएलएम

@BrunoLM यह इस बात पर निर्भर करता है कि हम कितनी बड़ी / छोटी db के बारे में बात कर रहे हैं और कितने लेनदेन प्रति सेकंड / मिनट की बात कर रहे हैं।
टेकी जो

2

SEQUENCEएक INSERTबयान में उपयोग करने के लिए , आप यह कोशिश कर सकते हैं:

INSERT INTO [MyTable] ([ID],[TITLE]) VALUES (NEXT VALUE FOR dbo.MyTableID, @TITLE) 

NEXT VALUE FOR dbo.MyTableIDएक से अगले नंबर प्राप्त करने के लिए वाक्यविन्यास है SEQUENCE


0

आप निम्न उदाहरण द्वारा प्रदर्शित कई तालिकाओं के लिए एक अनुक्रम का उपयोग कर सकते हैं:

CREATE SEQUENCE dbo.MyTableID
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

CREATE TABLE dbo.[MyTable1]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title1] [nvarchar](64) NOT NULL
);

CREATE TABLE dbo.[MyTable2]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title2] [nvarchar](64) NOT NULL
);

--Insert 2 rows
insert into  [MyTable1] (title1)
select 'title11'

insert into  [MyTable1] (title1)
select 'title12';

insert into  [MyTable2] (title2)
select 'title21'

insert into  [MyTable2] (title2)
select 'title22';

select f1.*, 'Into MyTable1' Tb from  [MyTable1] f1
union all
select f1.*, 'Into MyTable2' Tb from  [MyTable2] f1

आउटपुट:

+----+---------+---------------+
| ID | Title1  |      Tb       |
+----+---------+---------------+
|  1 | title11 | Into MyTable1 |
|  2 | title12 | Into MyTable1 |
|  3 | title21 | Into MyTable2 |
|  4 | title22 | Into MyTable2 |
+----+---------+---------------+

sqlfiddle

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.