আমি কীভাবে একটি কলাম ব্যবহার করে একটি সারণী তৈরি করব?


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

আমি মাই টেবেলে নতুন রেকর্ড সন্নিবেশ করতে চাই এবং আইডিকে ক্রমের পরবর্তী মানটিতে সেট করতে চাই। আমি এটা কিভাবে করবো? একটি ট্রিগার সম্ভবত, বা অন্য কোনও উপায় আছে? কিভাবে?

আমি যেমন এসকিউএল সার্ভার 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এই ক্ষেত্রে ব্যবহার করা কি নিরাপদ ? সংযোগ লিঙ্কে মাইক্রোসফ্ট আমাদের ব্যবহার করতে বলে no cache
ব্রুনোএলএম

@ ব্রুনোএলএম এটি নির্ভর করে যে আমরা কত বড় / ডিবি নিয়ে কথা বলছি এবং প্রতি সেকেন্ড / মিনিটে আমরা কত লেনদেনের বিষয়ে কথা বলছি।
টেকি জো

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.