Identifikatsiya kiritish oʻchirilgan

Materialning sarlavhasidan ko'rinib turibdiki, bugun men bu haqda gapiraman, ba'zi hollarda jadvalning foydali xususiyatlari Microsoft SQL Server sifatida IDENTITY_INSERT, ushbu maxsus xususiyatdan foydalanib, siz avtomatik o'sish maydoniga avval o'chirilgan qiymatni kiritishingiz mumkin, ya'ni. Yo'qolgan identifikator qiymatlarini to'ldiring yoki tiklang.

Ehtimol, ko'pgina SQL server dasturchilari, ba'zi sabablarga ko'ra, identifikator spetsifikatsiyasi belgilangan jadvalda ba'zi yozuvlar o'chirilgan va keyin bu yozuvlarni eski qiymatlari bilan tiklash zarurati tug'ilgan vaziyatga duch kelishgan. identifikatorlar. Aqlga keladigan birinchi narsa, albatta, identifikatsiyani o'chirish, kerakli qiymatlar bilan qatorlarni kiritish va keyin identifikatsiyani tiklashdir, ammo buning uchun siz tushunganingizdek, juda ko'p manipulyatsiyalarni bajarish kerak. joriy ishning borishiga ta'sir qiladi, shuning uchun buni tezda qilish kerak va ma'lumotlar bazasida ishlaydigan foydalanuvchilar bo'lmagan paytda yaxshiroqdir.

Ammo, aslida, jadval identifikatori ustuniga qiymatlarni kiritish imkonini beruvchi oddiyroq va eng muhimi to'g'ri usul mavjud, bu xususiyatdan foydalanishdir. Identifikatsiya INSERT.

MS SQL Serverdagi IDENTITY_INSERT xususiyati

IDENTITY_INSERT jadvalning identifikator ustuniga aniq qiymatlarni kiritish imkonini beruvchi jadval xususiyatidir, ya'ni. avtomatik oshirish maydoniga. Kiritilgan identifikatorning qiymati, masalan, ma'lum bir qiymat oralig'ini o'tkazib yuborish uchun joriy qiymatdan kichik yoki kattaroq bo'lishi mumkin.

Ushbu xususiyat bilan ishlashda ba'zi nuanslarni hisobga olish kerak, keling, ularni ko'rib chiqaylik:

  • IDENTITY_INSERT xususiyati seansdagi faqat bitta jadval uchun ON bo'lishi mumkin, ya'ni. IDENTITY_INSERTni bir vaqtning o‘zida ikki yoki undan ortiq jadvallar uchun ON holatiga o‘rnatib bo‘lmaydi. Agar bitta SQL bayonotida bir nechta jadvallar uchun IDENTITY_INSERT ON dan foydalanish kerak bo'lsa, avval ishlov berilgan jadval uchun qiymatni OFF ga, so'ngra keyingi jadval uchun IDENTITY_INSERT ni ON ga o'rnatishingiz kerak;
  • Agar kiritilgan identifikator qiymati joriy qiymatdan katta bo'lsa, SQL server avtomatik ravishda kiritilgan qiymatdan joriy qiymat sifatida foydalanadi, ya'ni. agar, masalan, keyingi identifikator qiymati 5 bo'lsa va siz IDENTITY INSERT-dan foydalanib, 6 qiymatiga ega identifikatorni kiritsangiz, keyingi identifikator qiymati avtomatik ravishda 7 ga aylanadi;
  • IDENTITY_INSERT dan foydalanish uchun foydalanuvchi tegishli huquqlarga ega bo'lishi kerak, ya'ni ob'ekt egasi yoki sysadmin server roli, db_owner yoki db_ddladmin ma'lumotlar bazasi rolining a'zosi bo'lishi kerak.

Shunday qilib, identifikatorli ustunga qiymat kiritishimiz kerak bo'lgan vaziyatni ko'rib chiqaylik, deylik, bu qiymatga ega qator o'chirildi va biz uni qayta tiklashimiz kerak.

Birinchidan, manba ma'lumotlarini ko'rib chiqaylik.

Dastlabki ma'lumotlar

Eslatma! Misol tariqasida men Microsoft SQL Server 2012 Express DBMS dan foydalanaman.

Biz identifikatorli ustunga ega bo'lgan jadvalni yaratamiz va uni ma'lumotlar bilan to'ldiramiz.

CREATE TABLE TestTable(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, TextData VARCHAR(50) NOT NULL); TestTable(TextData) VALUES ("1-qator"); INSERT INTO TestTable(TextData) VALUES("2-qator"); INSERT INTO TestTable(TextData) VALUES("3-qator"); INSERT INTO TestTable(TextData) VALUES("4-qator"); INSERT INTO TestTable(TextData) VALUES("Satr 5"); Test jadvalidan * TANLANGAN O'TING


Keyinchalik, ID qiymati 3 bo'lgan qatorni o'chiramiz.

DELETE Test Table WHERE TextData = "3-qator"; BOSH

Jadval qatorlarini avtomatik oshirish maydoni bilan tiklash

Bizda ID = 3 qiymatli jadvalda etishmayotgan qator bor va biz uni ID = 3 bilan tiklashimiz kerak, buning uchun biz yangi SQL dasturchilari sifatida avval buni sinab ko'ring.

INSERT INTO TestTable (ID, TextData) VALUES (3, "Line 3"); BOSH


Ko'rib turganingizdek, biz bunday qatorni kirita olmadik.

Keling, IDENTITY_INSERT xususiyatidan foydalanamiz, ya'ni. TestTable jadvali uchun uning qiymatini ON ga o'rnatamiz.

SET IDENTITY_INSERT Test Table ON; INSERT INTO TestTable (ID, TextData) VALUES (3, "Line 3"); TestTable GO-DAN * TANLANG


Bu safar hammasi kutilganidek ketdi.

Eslatma! Agar identifikatorli ustun birlamchi kalit bo'lsa, bizning misolimizda bo'lgani kabi, agar siz allaqachon mavjud bo'lgan identifikator qiymatini kiritishga harakat qilsangiz, PRIMARY KEY cheklovi ishga tushadi, boshqacha qilib aytganda, noyob kalitlar amal qilishda davom etadi.

Eslatma! Ajam dasturchilarga mening "T-SQL dasturchining yo'li" kitobimni o'qishni tavsiya qilaman, unda men batafsil tasvirlab beraman. katta miqdor Misollar, men Transact-SQL tilining boshqa foydali xususiyatlari haqida gapiraman.

Hammasi men uchun, umid qilamanki, material siz uchun foydali bo'ldi!



identity_insert oʻchirilgan (11)

Agar siz yangilash uchun Liquibase-dan foydalansangiz SQL Server katta ehtimollik bilan siz yozuv kalitini autoIncrement maydoniga kiritishga harakat qilasiz. Ustunni qo'shimchadan olib tashlash orqali skriptingiz ishlashi kerak.

...

Quyidagi xato bo'yicha quyidagi skriptni bajaryapman. Xato nima va uni qanday hal qilish mumkin?

Server: Msg 544, 16-daraja, 1-holat, 1-qator

Agar IDENTITY_INSERT o‘chiq bo‘lsa, “jadval” jadvaliga identifikatsiya ustuni uchun aniq qiymat kiritish mumkin emas.

Agar siz SQL serverida ushbu xatoga duch kelsangiz, ushbu so'rovni bajaring,

IDENTITY_INSERT jadval nomini YOQING

Misol uchun, agar jadval nomi talaba bo'lsa, so'rov quyidagicha ko'rinadi: IDENTITY_INSERT talabani YOQING

Agar veb-ilovangizda ushbu xatoga duch kelsangiz yoki ob'ekt ramkasidan foydalansangiz, avval ushbu so'rovni ishga tushiring SQL server va yangilash ob'ekt modeli (.edmx fayli) va yaratish loyiha, va bu xato hal qilinadi

Muammo chop etilmaydigan DBContext yoki DBSet-dan foydalanishda, agar siz interfeysdan foydalansangiz va savechanges usulini umumiy tarzda amalga oshirsangiz

Agar bu sizning holatingiz bo'lsa, men DBContex kabi yozishni tavsiya qilaman

MyDBContext.MyEntity.Add(mynewObject)

Bu. .Saqlash o'zgarishlar ishlaydi

OperationID-ga qiymat qo'ymang, chunki u avtomatik ravishda yaratiladi. Urunib ko'r:

Jadval (OpDescription, FilterID) qiymatlarini kiriting ("Ieraxiya yangilanishi", 1)

Siz shunchaki ushbu operatordan foydalanishingiz mumkin, masalan, jadvalingiz nomi bo'lsa maktab. O'rnatishdan oldin identity_insert o'rnatilganligiga ishonch hosil qiling ON, va qo'shish so'rovidan so'ng, intest_id ni aylantiring O'CHIRIB

SET IDENTITY_INSERT School ON /* so‘rovni shu yerga kodni kiriting */ SET IDENTITY_INSERT School OFF

Va agar foydalansangiz Oracle SQL Ulanish uchun dasturchi, qo'shishni unutmang / sqldev:stmt /

/ sqldev:stmt/identity_insert TABLE ni yoqing;

Ikkita bor turli yo'llar bilan INSERT yozuvlarini xatosiz yozish:

1) IDENTITY_INSERT o'chirilganda. ASOSIY KALIT ID HAqiqiy bo'lmasligi kerak

2) IDENTITY_INSERT ON holatiga o'rnatilganda. ASOSIY KALIT ID HAqiqiy bo'lishi kerak

IDENTITY asosiy kaliti bilan yaratilgan bir xil jadvaldagi quyidagi misolga ko'ra:

JADVAL YARATISH. (ID INT IDENTITY(1,1) PRIMARY KEY, Familiya VARCHAR(40) NO NULL, Ism VARCHAR(40));

1) Birinchi misolda IDENTITY_INSERT o'chirilganida xatolikka yo'l qo'ymasdan jadvalga yangi yozuvlarni kiritishingiz mumkin. “ASOSIY KOLOT identifikatori » HAZIR BO'LMASLIK"INSERT IN" iboralaridan, va noyob identifikator qiymati avtomatik ravishda qo'shiladi:. Agar identifikator bu holda INSERT da mavjud bo'lsa, siz "Jadvaldagi ustunni aniqlash uchun aniq qiymatni kiritib bo'lmadi..." xatosini olasiz.

SET IDENTITY_INSERT . OFF; INSERT INTO. (Ism, Familiya) VALUES ("JANE", "DOE"); INSERT INTO Shaxslar (Ism, Familiya) QIYMATLAR ("JOE", "JANGIR");

2) Ikkinchi misolda IDENTITY_INSERT yoqilganda xatolikka yo'l qo'ymasdan jadvalga yangi yozuvlarni kiritishingiz mumkin. “ASOSIY KOLOT identifikatori » Haqiqiy bo'lishi kerak"INSERT INTO" bayonotlaridan, ID qiymati hali mavjud emas: Agar identifikatsiya INSERTda mavjud bo'lmasa, bu holda siz "Identifikatsiya ustuni jadvali uchun aniq qiymat bo'lishi kerak..." xatosini olasiz.

SET IDENTITY_INSERT . ON; INSERT INTO. (ID,Ism,Familiya) VALUES (5,"JOHN","WHITE"); INSERT INTO. (ID,Ism,Familiya) VALUES (3,"JACK","BLACK");

JADVAL OLISH. [Shaxslar]:

OK, men o'zimniki juda oddiy deb qaror qildim. Xuddi shu nomdagi asosiy kalitingiz sinflaringiz bilan bir xil ekanligiga ishonch hosil qiling, bu erda yagona farq shundaki, asosiy kalitingiz unga identifikatorni qo'shadi yoki sinf qandayligi bilan bog'liq bo'lmagan asosiy kalitlarga ishora qiladi.

Siz OperationId uchun qiymatlarni kiritmoqdasiz identifikatsiya ustuni.

O'zingizning identifikator qiymatlaringizni belgilashingiz uchun jadvalga identifikatsiya qo'shimchasini kiritishingiz mumkin.

SET IDENTITY_INSERT Table1 INSERT INTO Table1 /*E’tibor bering, bu yerda ustunlar ro‘yxati talab qilinadi, ixtiyoriy emas*/ (OperationID, OpDescription, FilterID) VALUES (20, “Ieraxiya yangilanishi”, 1) SET IDENTITY_INSERT Table1 OFF.

"Jadvalni qo'shish" uchun nimadan foydalanishni bilmayman, lekin agar siz faqat ba'zi qiymatlarni kiritmoqchi bo'lsangiz, harakat qilib ko'ring:

(OpDescription,FilterID) qiymatlariga kiriting ("Ieraxiyani yangilash",1);

Menda bir xil xato xabari bor edi, lekin bu ishlashi kerak deb o'ylayman. Agar u asosiy kalit bo'lsa, identifikator avtomatik ravishda oshirilishi kerak.

So'rovda avval aytib o'tilgan OperationId mavjud bo'lib, u erda bo'lmasligi kerak, chunki u avtomatik ravishda oshiriladi

Jadval (OperationID, OpDescription, FilterID) qiymatlarini kiriting (20, "Ieraxiyani yangilash", 1)

sizning so'rovingiz shunday bo'ladi

Jadval (OpDescription, FilterID) qiymatlarini kiriting ("Ieraxiya yangilanishi", 1)



identity_insert ms sql uchun oʻchirilgan (11)

"Jadvalni qo'shish" uchun nimadan foydalanishni bilmayman, lekin agar siz faqat ba'zi qiymatlarni kiritmoqchi bo'lsangiz, harakat qilib ko'ring:

(OpDescription,FilterID) qiymatlariga kiriting ("Ieraxiyani yangilash",1);

Menda bir xil xato xabari bor edi, lekin bu ishlashi kerak deb o'ylayman. Agar u asosiy kalit bo'lsa, identifikator avtomatik ravishda oshirilishi kerak.

Quyidagi xato bo'yicha quyidagi skriptni bajaryapman. Xato nima va uni qanday hal qilish mumkin?

Server: Msg 544, 16-daraja, 1-holat, 1-qator

Agar IDENTITY_INSERT o‘chiq bo‘lsa, “jadval” jadvaliga identifikatsiya ustuni uchun aniq qiymat kiritish mumkin emas.

Agar ulanish uchun Oracle SQL Developer dan foydalansangiz, / qo'shishni unutmang. sqldev:stmt /

/ sqldev:stmt/identity_insert TABLE ni yoqing;

Tashkilotingizda ushbu jadval uchun ID o'rnatilgan ustun ustiga DatabaseGenerated atributini qo'shing:

Umumiy int TaskId (olish; o'rnatish; )

OperationID-ga qiymat qo'ymang, chunki u avtomatik ravishda yaratiladi. Urunib ko'r:

Jadval (OpDescription, FilterID) qiymatlarini kiriting ("Ieraxiya yangilanishi", 1)

Siz OperationId uchun qiymatlarni kiritmoqdasiz identifikatsiya ustuni.

O'zingizning identifikator qiymatlaringizni belgilashingiz uchun jadvalga identifikatsiya qo'shimchasini kiritishingiz mumkin.

SET IDENTITY_INSERT Table1 INSERT INTO Table1 /*E’tibor bering, bu yerda ustunlar ro‘yxati talab qilinadi, ixtiyoriy emas*/ (OperationID, OpDescription, FilterID) VALUES (20, “Ieraxiya yangilanishi”, 1) SET IDENTITY_INSERT Table1 OFF.

Muammo chop etilmaydigan DBContext yoki DBSet-dan foydalanishda, agar siz interfeysdan foydalansangiz va savechanges usulini umumiy tarzda amalga oshirsangiz

Agar bu sizning holatingiz bo'lsa, men DBContex kabi yozishni tavsiya qilaman

MyDBContext.MyEntity.Add(mynewObject)

Bu. .Saqlash o'zgarishlar ishlaydi

Agar siz SQL Serveringizni yangilash uchun Liquibase-dan foydalanayotgan bo'lsangiz, autoIncrement maydoniga yozuv kalitini kiritishga harakat qilasiz. Ustunni qo'shimchadan olib tashlash orqali skriptingiz ishlashi kerak.

...

IDENTITY_INSERT ni ON holatiga o‘rnatishda juda ehtiyot bo‘ling. Ma'lumotlar bazasi texnik xizmat ko'rsatish rejimida bo'lmasa va bitta foydalanuvchiga o'rnatilmasa, bu yomon amaliyotdir. Bu nafaqat sizning qo'shishingizga, balki jadvalga kirishga harakat qilayotganlarga ham ta'sir qiladi.

Nima uchun identifikatsiya maydoniga qiymat qo'yishga harakat qilyapsiz?

So'rovda avval aytib o'tilgan OperationId mavjud bo'lib, u erda bo'lmasligi kerak, chunki u avtomatik ravishda oshiriladi

Jadval (OperationID, OpDescription, FilterID) qiymatlarini kiriting (20, "Ieraxiyani yangilash", 1)

sizning so'rovingiz shunday bo'ladi

Jadval (OpDescription, FilterID) qiymatlarini kiriting ("Ieraxiya yangilanishi", 1)

OK, men o'zimniki juda oddiy deb qaror qildim. Xuddi shu nomdagi asosiy kalitingiz sinflaringiz bilan bir xil ekanligiga ishonch hosil qiling, bu erda yagona farq shundaki, asosiy kalitingiz unga identifikatorni qo'shadi yoki sinf qandayligi bilan bog'liq bo'lmagan asosiy kalitlarga ishora qiladi.

Agar siz SQL serverida ushbu xatoga duch kelsangiz, ushbu so'rovni bajaring,

IDENTITY_INSERT jadval nomini YOQING

Misol uchun, agar jadval nomi talaba bo'lsa, so'rov quyidagicha ko'rinadi: IDENTITY_INSERT talabani YOQING

Agar siz ushbu xatoni veb-ilovangizda yoki ob'ekt ramkasidan foydalanayotgan bo'lsangiz, avval ushbu so'rovni SQL serverida ishga tushiring va yangilang. ob'ekt modeli (.edmx fayli) va yaratish loyiha, va bu xato hal qilinadi

Savol: Jadvaldagi identifikatsiya ustuniga aniq qiymat qo‘shib bo‘lmaydi


Hayrli kun.
Xato: “IDENTITY_INSERT “OFF” holatiga o‘rnatilganda “Jadval nomi” jadvalidagi identifikatsiya ustuniga aniq qiymat kiritib bo‘lmadi.”
Quyidagi buyruq bilan ON holatiga o'tishingiz kerakligini tushunaman:
SQL
1 IDENTITY_INSERT Jadval nomini YOQING
.
Ammo so'rov bajarilmaydi ... Ehtimol, jadval saqlanadigan maxsus ma'lumotlar bazasini ro'yxatdan o'tkazish kerakmi?
Iltimos aytolmaysizmi.
Rahmat.

Javob: F5 tugmasini bosing

Savol: Avtomatik kiritish maydoniga qiymat kiritish


Salom!

Umuman olganda, mysql dan SQL serveriga ma'lumotlarni uzatishim kerak.
Men turli vositalarni sinab ko'rdim, lekin hech qanday foydali narsa bo'lmadi (ehtimol, yangi jadvallar maydonlar uchun bir oz boshqacha nomlar va bir oz boshqacha turdagi maydonlarga ega bo'lganligi sababli).

Ssenariy yozib, o‘zim kiritganim ma’qul, deb qaror qildim. Biroq, agar men o'z qiymatimni aniq yozsam, insert avtomatik kiritish maydonida ishlamasligiga duch keldim. Masalan:

Lekin xuddi shu narsa.
(maydon identifikatori yagona, asosiy kalit, autoinr.)

Nima qilish kerak, qaerda qazish kerak?

Katta rahmat!

Javob: Endi men mahalliy ma'lumotlar bazasidan uzoq serverga eksport qilmoqchiman.
Masofaviy kompyuterga bir necha million qator qo'shish juda yoqimsiz. Men SSMS vositasidan foydalanaman va u "faqat o'qish uchun" ustuniga ma'lumotlarni kiritib bo'lmadi" xatosini beradi.
Hozirdan beri men asboblardan foydalanaman, SQL yozish uchun joy yo'q.
Men tushunganimdek, cheklovni maydondan olib tashlashimiz kerak (avtomatik incr), men buni qanday qilishni tushunmayapman, qaerda qazish kerak?

Rahmat!

P.S. Masofaviy server - azure.

8 daqiqadan so'ng qo'shiladi
Jin ursin, yarim kun googling qildim, topa olmadim, lekin postni yozganimdan so‘ng bir yechimga duch keldim.Ma’lum bo‘lishicha, SSMSda “Select source tables and views” oynasida tugmani bosish kerak ekan. kerakli jadvallarni oching, pastki qismidagi "Tahrirlash" tugmasini bosing va "Ustunga kiritishga ruxsat berish" katagiga belgi qo'ying. identifikatorlar".
Bundan tashqari, eksport qilishda sizning va masofaviy ma'lumotlar bazasi serverining kodlanishini diqqat bilan kuzatib boring, u mos kelishi kerak.

Savol: Mavjud jadval maydoniga katakchani kiriting


Salom!
Muammo bor
Ma'lumotlar bazasida jadval mavjud bo'lib, u foydalanuvchi HTML forma maydonlarini kiritganda to'ldiriladi
Ushbu jadval to'g'ridan-to'g'ri veb-saytda ko'rsatiladi.
Ma'lumotlar bazasi jadvalining har bir qatoriga yana bitta qator qo'shishni qanday amalga oshirish kerak html shakli
Boshqacha qilib aytganda, foydalanuvchi saytga joylashtirgan reklama mavjud. Bu reklamalarning barchasi birin-ketin br teg orqali ko'rsatiladi. Har bir e'longa boshqa html formasini qanday biriktirish mumkin: "Men boraman!" bosilganda, noyob identifikatorli ustunning qiymati noldan boshlab 1 ga oshdi. VKontakte-da yoqtirish printsipi
Men yangi boshlovchiman. Shu sababli, ushbu muammoni hal qilish bo'yicha mutaxassislarning fikri qiziq. Men bir haftadan beri azob chekyapman. Oldindan rahmat

Savol: Access 2010 da turli jadvallarga qiymatlarni qanday qo'shish yoki ayirish mumkin? Xususan, ustun qiymatlari


Access 2010 da turli jadvallarga qiymatlarni qanday qo'shish yoki ayirish mumkin? Xususan, ustun qiymatlari
Xo'sh, boshqa har qanday harakat.

Javob:

Kimdan xabar Nikon3

Ushbu funktsiyani amalga oshirish uchun quyidagilar zarur:
"Tiri bo'yicha qancha pul ekanligini aniqlang plastik kartalar mijozlar tomonidan sarflangan o `tgan oy."

Ma'lumotlar bazasida joylashgan tuzilmadagi muammoni hal qilish mumkin emas. Xarajatlar jadvalida sana yo'q! "Xarajatlar" bo'limida operatsiya sanasi kiritildi Pul", uni chiroqdan to'ldirdi. Agar "oxirgi" oy joriy deb faraz qilsak, so'rov quyidagicha bo'ladi.

SQL
1 2 3 4 5 6 Xaritalarni tanlang. [Karta kodi], Xaritalar. [ Karta turi] , SUM ([ Naqd pul sarfi]. [ Hisobdan yechib olingan mablag‘lar soni] ) AS [ Xarajatlar summasi] FROM ([ Naqd pul sarfi] INNER JOIN Clients ON [ Naqd pul sarfi] . [ Mijozning to‘liq ismi] = Mijozlar [ Mijoz kodi] ) INNER JOIN Cards ON Clients. [Karta turi] = Kartalar. [Karta kodi] QAYER OY ([ Naqd pul xarajati]. Tranzaksiya sanasi) = OY (SANA () ) Kartalar boʻyicha GURUHLASH. [Karta kodi], Xaritalar. [Karta turi], Xaritalar. [Karta turi]

“O‘tgan oy xarajatlari” so‘rovi uchun ilovaga qarang.

Savol: Boshqa ustunning qiymatlariga teng bo'lmagan ustun qiymatlarini chop etish


1-jadval satrlarini "A", "B", "C" ustunlari bilan ko'rsatish kerak, bunda "C" ustunining qiymatlari "D" ustunining qiymatlariga teng bo'lmasligi kerak. 2-jadval. Agar siz "B" shartini yozsangiz<>"G" keyin hamma narsani beradi mumkin bo'lgan variantlar(bir ustunning birinchi qiymatini ularning barchasi bilan boshqasidan navbat bilan solishtirish). "B" dan "G" qiymatlarini chiqarib tashlash kerak. Xuddi shu turdagi ma'lumotlar.

Savol: Jadval va jadvaldagi har bir ustun qancha xotirani egallashini qanday aniqlash mumkin?


Jadval va Access jadvalidagi har bir ustun qancha xotiradan foydalanishini qanday aniqlash mumkin?

Javob: Yordamdan. Ma'lumotlar bazasi maydonlarining turlari

MatnMatn yoki matn va raqamlar birikmasi, masalan, manzil va hisob-kitoblarni talab qilmaydigan raqamlar, masalan, telefon raqamlari, stok raqamlari yoki pochta indekslari. Faqat maydonga kiritilgan belgilar saqlanadi, matn maydonida foydalanilmagan pozitsiyalar saqlanmaydi. Kiritilgan belgilarning maksimal sonini boshqarish uchun FieldSize xususiyatini belgilang.255 belgigacha.
MEMO maydoniEslatmalar yoki tavsiflar kabi uzun matn yoki raqamlar.64 000 tagacha belgi qoʻlda yoki 1 Gb gacha dasturli kiritiladi.
RaqamliPul operatsiyalari bilan bog'liq hisob-kitoblar bundan mustasno, matematik hisoblar uchun foydalaniladigan raqamli ma'lumotlar (pul turidan foydalaning). Raqamli turni aniqlash uchun FieldSize xususiyatini aniqlang1, 2, 4 yoki 8 bayt. Faqat replikatsiya kodlari uchun 16 bayt
Sana vaqtiSanalar va vaqtlar8 bayt.
PulValyuta qiymatlari. Valyuta turi hisob-kitoblar paytida yaxlitlashni oldini olish uchun ishlatiladi. Raqamning butun qismida 15 tagacha, kasr qismida 4 tagacha belgini qabul qiladi8 bayt.
HisoblagichYozuv qo'shilganda ketma-ket (1 ga farq qiladigan) yoki tasodifiy raqamlarni avtomatik kiritish4 bayt. 16 bayt faqat kodni takrorlash uchun.
MantiqiyHa/Yo'q, rost/noto'g'ri, yoqilgan/o'chirilgan kabi faqat bitta yoki ikkita qiymatdan iborat maydonlar1 bit.
OLE ob'ektlariOb'ektlar (masalan, hujjatlar Microsoft Word, elektron jadvallar Microsoft Excel, rasmlar, tovushlar va boshqa ma'lumotlar) OLE protokolidan foydalanadigan boshqa dasturlarda yaratilgan. Ob'ektlar jadvalga bog'lanishi yoki ko'milishi mumkin Microsoft Access. OLE ob'ektini forma yoki hisobotda ko'rsatish uchun biriktirilgan ob'ekt ramkasidan foydalanish kerak1 gigabaytgacha (disk maydoni bilan cheklangan).
GiperhavolalarGiperhavolalar saqlanadigan maydon. Giperhavola UNC yo'li yoki URL bo'lishi mumkin.Giperhavolaning har bir qismi 2048 tagacha belgidan iborat bo'lishi mumkin

Bitta maydon yozuvlardagi uzunliklar yig'indisiga teng xotirani egallaydi. Jadval - maydon uzunliklarining yig'indisi. Shuningdek, xotirani egallagan indekslar, turli yordamchi va tizim jadvallari, xususiyatlar va boshqa narsalar mavjud.

Access 64-bit uchun boshqa, uzunroq maydon turlari mavjud

Savol: Ma'lumotlar bazasini rejalashtirish: Jadvaldagi ustunlar soni ishlashga ta'sir qiladimi?


Jadvaldagi ustunlar soni ishlashga ta'sir qiladimi?

Ikki vaqt maydonini yaratish qanday samaraliroq bo'ladi? , count_time va ikkita qiymatni ajratib oling
yoki ushbu qiymatlarni "|" belgisi bilan ajratish uchun bitta tt maydoni yarating. va ularni SUBSTRING_INDEX(tt , "|", 1) AS vaqt , SUBSTRING_INDEX(tt , "|", -1) AS hisoblash_vaqti sifatida ajratib oling.

Javob:

Kimdan xabar WeMeSder

SUBSTRING_INDEX AS vaqt

Bu nima va uni kirishda qayerdan topdingiz?

Kimdan xabar WeMeSder

Qanday qilib ikkita vaqt maydonini yaratish samaraliroq bo'ladi, count_time va ikkita qiymatni olish

Albatta, bu variant. Sizda ikkita RAQAM bor, ular yaxshi - ixcham va tezkor ma'lumotlar turlari.

Siz xohlaysizmi 1) ularni ko'proq joy egallagan va sekinroq qayta ishlanadigan satrlarga aylantiring
2) sana ma'lumotlari turi hech qanday raqamlarga ruxsat bermaydi - ya'ni. shuningdek, sanalarning haqiqiyligi uchun chekni o'zingiz yozing
3) sana uchun sana va satr sana uchun saralash har xil, bu sizda paydo bo'lganmi?
4) har xil ma'noga ega bo'lgan ma'lumotlarni bitta maydonga to'plash g'oyasi mutlaqo epikdir

Savol: VBA yordamida jadvaldagi ustunni A dan Z gacha qanday saralash mumkin?


Hammaga salom!

VBA yordamida jadvaldagi ustunni A dan Z gacha qanday saralashni ayting?

Javob: Jadval konstruktorida Saralash tartibi xususiyati mavjud. U yerda saralanadigan maydonlarning nomlarini va tartiblash tartibini (Asc, Desc) yozishingiz mumkin. Ochiq jadvalda siz ustunni tanlashingiz va tartiblash tartibini o'rnatishingiz mumkin. Agar siz ma'lumotlar jadvalining ekran tasvirini saqlasangiz, keyingi qo'ng'iroqlar paytida buyurtma saqlanib qoladi. Siz, masalan, SetOrderBy buyrug'i yordamida ochiq jadvalga (shakl, so'rov) buyurtma berishingiz mumkin.
kabi (tanlang "Remark, Erich, Mariya, Rodriges" "Fernandes, Peres, Vladimir, Kastulovich" ittifoqdan dual barcha tanlang "Jozue, Gonsales, de Leon" ittifoqdan dual barcha tanlang "Karam, Abu, Il, Xatab, O'g'li" dual dan) t dan fio ni tanlang;

2) Avtoto'ldirish: qo'shish/yangilash trigger + rus harflarini transliteratsiya qilish funksiyasi
yoki, muqobil ravishda, virtual ustun

mytransliteratsiya funktsiyasi (oila)

p.s. Ko'pincha lotincha imlo avtomatik tarzda yaratilganiga mos kelmasligi mumkin
masalan ustida bank kartalari, shuning uchun men avtomatik to'ldirishdan tashqari, qo'lda ham ta'minlayman

Savol: Ma'lumotlarni kiritishda identifikator ustunini noto'g'ri to'ldirish


Xayrli kun. Iltimos, kim biladi, nima sabab bo'lishi mumkinligini ayting.
Men SQL Serverdan SQL Manager 2008 dan foydalanaman.
yarataman yangi stol identifikator ustuni bilan, boshlang'ich qiymatni ko'rsatuvchi - 1, o'sish - 1.
Keyin unga quyidagi so'rov bilan ma'lumotlarni yozaman:

Peny ichiga kiriting. peny (id_customer, period_calc) qiymatlari (@id_customer, @period_calc)

Bunday holda, negadir identifikator ustuni bittadan emas, balki = Jadvaldagi maksimal identifikator qiymati + kiritilgan qatorlar soni +1 ga teng qiymatdan to'ldiriladi.

Jadvalning skrinshoti ilova qilingan. Bunday holda, avval 2 ta, keyin yana 5 ta, keyin esa yana 2 ta yozuv kiritildi.

Xabarga fayl biriktirilgan. Hajmi - 7 Kb

Javob: Aniq tushunarli. Rahmat.)