Аппараттық және бағдарламалық қамтамасыз етуді орнату

Ms sql кестені деректермен толтыру жолы.

Егер сізге SQL сұрауы арқылы қайтарылған нәтиже деректер жинағын сақтау қажет болса, онда бұл мақала сізді қызықтырады, өйткені біз қарастырамыз. SELECT INTO мәлімдемесі, оның көмегімен Microsoft SQL серверіжаңа кесте құруға және оны SQL сұрауының нәтижесімен толтыруға болады.

Біз, әрине, SELECT INTO операторының өзін сипаттаудан бастаймыз, содан кейін мысалдарға көшеміз.

Transact-SQL жүйесінде SELECT INTO мәлімдемесі

ТАҢДАУ- жаңа кесте құратын және оған SQL сұранысынан алынған жолдарды кірістіретін T-SQL тіліндегі мәлімдеме. Кесте құрылымы, яғни. бағандардың саны мен атаулары, сондай-ақ деректер түрлері мен нөлдік сипаттар бағанға негізделген болады ( өрнектер) SELECT операторындағы бастапқы таңдау тізімінде көрсетілген. Әдетте, SELECT INTO операторы бірнеше кестелерден, көріністерден, соның ішінде кейбір есептелген деректерді бір кестедегі деректерді біріктіру үшін қолданылады.

SELECT INTO мәлімдемесі жаңа кесте жасалатын дерекқорда CREATE TABLE рұқсатын талап етеді.

SELECT INTO мәлімдемесінде екі аргумент бар:

  • new_table - атауы жаңа үстел;
  • файлдар тобы - файлдар тобы. Аргумент берілмесе, әдепкі файл тобы пайдаланылады. Бұл мүмкіндік Microsoft SQL Server 2017 нұсқасынан бастап қол жетімді.

SELECT INTO мәлімдемесі туралы маңызды ойлар

  • Мәлімдеме ағымдағы серверде кесте құру үшін пайдаланылуы мүмкін, қашықтағы серверде кесте құруға қолдау көрсетілмейді;
  • Жаңа кестені ағымдағы дерекқордан және ағымдағы серверден, басқа дерекқордан немесе қашықтағы серверден деректермен толтыруға болады. Мысалы, пішінде толық дерекқор атын көрсетіңіз database.schema.table_nameнемесе қашықтағы сервер жағдайында, linked_server.database.schema.кесте_аты;
  • Жаңа кестедегі сәйкестендіру бағаны IDENTITY сипатын иеленбейді, егер: мәлімдемеде біріктіру (JOIN, UNION), GROUP BY сөйлемі, агрегаттық функция болса, сонымен қатар сәйкестік бағаны өрнектің бөлігі болса, қашықтан алынған деректер көзі немесе тізім таңдауында бірнеше рет орын алады. Барлық осындай жағдайларда сәйкестік бағаны IDENTITY сипатын иеленбейді және NO NULL ретінде жасалады;
  • SELECT INTO операторы тіпті бастапқы кесте бөлінген болса да, бөлінген кестені құра алмайды;
  • Кәдімгі кестені жаңа кесте ретінде де, уақытша кесте ретінде де көрсетуге болады, бірақ кестенің айнымалы мәнін немесе кесте мәнінің параметрін көрсете алмайсыз;
  • Есептелген баған, егер SELECT INTO операторының таңдау тізімінде бар болса, ол жаңа кестеде қалыпты болады, яғни. есептелмейтін;
  • SELECT INTO COMPUTE сөйлемімен бірге қолданыла алмайды;
  • SELECT INTO көмегімен индекстер, шектеулер және триггерлер жаңа кестеге тасымалданбайды, олар қажет болса, оператор орындалғаннан кейін қосымша құрылуы керек;
  • ORDER BY сөйлемі жаңа кестедегі жолдардың көрсетілген тәртіпте кірістірілетініне кепілдік бермейді.
  • FILESTREAM төлсипаты жаңа кестеге тасымалданбайды. Жаңа кестедегі FILESTREAM BLOB файлдары варинарлық(макс) BLOB сияқты болады және 2 ГБ шегі болады;
  • SELECT INTO әрекеттері кезінде транзакция журналына жазылған деректер көлемі қалпына келтіру үлгісіне байланысты. Жаппай тіркелген қалпына келтіру үлгісін және қарапайым қалпына келтіру үлгісін пайдаланатын дерекқорларда SELECT INTO сияқты жаппай операциялар ең аз тіркеледі. Нәтижеде SELECT INTO операторы кесте жасау үшін бөлек операторларға және оны деректермен толтыру үшін INSERT операторына қарағанда тиімдірек болуы мүмкін.

Мысалдар INTO ТАҢДАУ

Мен барлық мысалдарды Microsoft SQL Server 2016 Express ДҚБЖ іске қосамын.

Бастапқы деректер

Алдымен екі кесте құрайық және оларды деректермен толтырайық, біз мысалдарда осы кестелерді біріктіреміз.

КЕСТЕНІ ЖАСАУ TestTable( IDENTITY(1,1) NO NULL, NO NULL, (100) NO NULL, NULL) ON GO КЕСТЕНІ ЖАСАУ TestTable2 (IDENTITY (1,1) NO NULL, (100) NO NULL) ӨТУ ҮШІН Сынақ кестесіне кірістіру МӘНДЕР (1,"Пернетақта", 100), (1, "Тінтуір", 50), (2, "Телефон", 300) Сынақ Кесте2 МӘНДЕРІНЕ КІРУ (" Компьютердің құрамдас бөліктері"), ("Мобильді құрылғылар") ТАҢДАУ * Сынақ Кестесінен ТАҢДАУ * Сынақ 2 кестесінен

1-мысал - Деректерді біріктіру арқылы SELECT INTO операторымен кесте құру

Екі кестені біріктіріп, нәтижені жаңа кестеде сақтау керек деп елестетіп көрейік ( мысалы, біз оларға жататын категорияның атауы бар өнімдерді алуымыз керек).

Операция SELECT T1.ProductId, T2.CategoryName, T1.ProductName, T1.Price 3. Сынақ Кестесінен T1 СОЛҒА ҚОСЫЛУ СынақКесте2 T2 T1.CategoryId = T2.CategoryId --Жаңа кестеден деректерді таңдау FROMT3 сынақтан таңдау *


Нәтижесінде TestTable3 деп аталатын кестені құрып, оны біріктірілген деректермен толтырдық.

2-мысал – Деректерді топтастыру арқылы SELECT INTO операторын пайдаланып уақытша кесте құру

Енді бізге топтастырылған деректер қажет делік, мысалы, белгілі бір категориядағы өнімдердің саны туралы ақпарат, ал бұл деректерді уақытша кестеде сақтау керек, мысалы, біз бұл ақпаратты тек SQL операторларында қолданамыз, сондықтан біз толыққанды кесте құрудың қажеті жоқ.

SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO #TestTable INTO INTO TestTable T1 FROM SOL JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId - T2.CategoryUpTable GROC-Name арқылы уақытша кестені (#TestTable) жасаңыз. уақытша кестеден деректер ТАҢДАУ * FROM #TestTable


Көріп отырғаныңыздай, біз #TestTable уақытша кестесін жасап, оны топтастырылған деректермен толтырдық.

Сонымен, сіз және мен T-SQL тіліндегі SELECT INTO мәлімдемесін қарастырдық, «T-SQL бағдарламашысының жолы» кітабымда мен T-SQL тілінің барлық конструкциялары туралы егжей-тегжейлі айтамын ( Мен оқуға кеңес беремін), және бұл әзірше!

  • SQL серверіндегі пайыздарды, табыстарды және сәтсіздіктерді есептей алу үшін SELECT мәлімдемелерін қалай біріктіруге болады?
  • SQL: Кейбір сипат мәндеріне негізделген жеке жолдарды қалай таңдауға болады
  • Әр санаттың ең жоғары бағасы бар өнімді қалай таңдауға болады?
LevelId минималды өнім 1 x 1 2 y 1 3 z 1 4 a 1

1 2.3-тен тек өнім идентификаторын өзгерте отырып, дерекқордағы бірдей деректерді қайталауым керек.... 40

LevelId минималды өнім 1 x 2 2 y 2 3 z 2 4 a 2

сияқты бірдеңе істей алар едім

INSERT INTO dbo.Levels dbo.Levels ішінен жоғарғы 4 * ТАҢДАҢЫЗ, бірақ бұл жай ғана деректерді көшіреді. Деректерді көшіріп, тек Өнім мәнін өзгерткен кезде қоюға болатын әдіс бар ма?

Сіз ең көп жолдасыз - сізге тағы бір логикалық қадам жасау керек:

dbo.Levels INTO INSERT (LevelID, Min, Product) dbo.Levels ҚАЙДАН ДЕҢГЕЙ ИДЕНТІ, Мин, 2 ТАҢДАУ ҚАЙДА Өнім = 1

... басқа өнім идентификаторы бар жолдарыңызды қайталайды.

Сондай-ақ WHERE Өнім = 1 ТОП 4-ке қарағанда сенімдірек болатынын ескеріңіз. Кестеде төрт жолдан көп болғаннан кейін, таңдауға ТАПСЫРЫС БОЙЫНША дегенді қоспайынша, ТОП 4 бірдей төрт жолды қайтаратынына кепілдік бере алмайсыз, бірақ WHERE өнімі = ... әрқашан бірдей қайтарады және сақтайды. 1-өнім идентификаторы бар қосымша жолды қоссаңыз да (қосымша жолдар қоссаңыз, ТОП 4-ті ТОП 5-ке өзгертуді қарастыру қажет және т.б.) жұмысқа кіріседі.

Өнім идентификаторын жасап, оны келесіге жүктеп салуға болады:

< 40) INSERT INTO dbo.Levels(`min`, product) SELECT `min`, cte.n as product fROM dbo.Levels l cross join cte where l.productId = 1;

Бұл LevelId кірістіру кезінде автоматты түрде арттырылатын идентификатор бағаны деп болжайды. Егерде:

cte as (n бірлестігі ретінде 2-ні таңдаңыз, барлығы cte-ден n + 1-ді таңдаңыз, мұнда n< 40) INSERT INTO dbo.Levels(levelid, `min`, product) SELECT l.levelid+(cte.n-1)*4, `min`, cte.n as product fROM dbo.Levels l cross join cte where l.productId = 1;

dbo.Levels (LevelId, Мин, Өнім) INTO INSERT (LevelId, Min, Product) Dbo.Levels ҚАЛЫНАН ТОП 4 LevelId, Мин, 2 ТАҢДАУ

SELECT ішіне өрнектерді, қатты кодталған мәндерді немесе Өнім + 1 немесе басқасын қосуға болады.

Менің ойымша, сіз LevelId енгізгіңіз келмейтін шығар, бірақ үлгіңізге сәйкес болу үшін оны сол жерде қалдырыңыз. Оны қаламасаңыз, оны INSERT және SELECT бөлімдерінен алып тастаңыз.

Мысалы, сандар кестесінде CROSS JOIN қолдануға болады.

МЕН L0 AS(ТАҢДАУ 1 ЕСЕП БАРЛЫҚ 1 О ҚАБЫЛДА ТАҢДАҢЫЗ), -- 2 жол L1 AS(1 АСҚАН ТАҢДАҢЫЗ L0 ҚАТЫСЫНДА АЙҚЫС БІРІСУ РЕТІН L0 AS B), -- 4 жол Сандар AS(ҚОЛ_НӨМЕРІН ТАҢДАҢЫЗ() АРТТЫ (ТӘРТІП БЕРІҢІЗ (БҰЛ МӘНДІ ТАҢДАУ)) L1-ден N ТАҢДАУ) lvl., lv., n.[N] dbo. lvl CROSS JOIN Сандар саны

Бұл 4 рет қайталанады.

SQL – 3-сабақ. Кестелерді құру және оларды ақпаратпен толтыру

Сонымен, біз деректер түрлерімен таныстық, енді біз форумымыздың кестелерін жетілдіреміз. Алдымен оларды бөліп алайық. Ал пайдаланушылар кестесінен бастайық. Оның 4 бағанасы бар:

Id_user - бүтін мәндер, сондықтан түрі int болады, оны 10 символға шектейік - int (10).
name - varchar жолының мәні, оны 20 таңбаға шектейік - varchar(20).
email - varchar жолының мәні, оны 50 таңбаға шектейік - varchar(50).
password - varchar жолының мәні, оны 15 символға шектейік - varchar(15).

Барлық өріс мәндері қажет, сондықтан NO NULL түрін қосу керек.

id_user int(10) NULL ЕМЕС
varchar(20) атауы NULL ЕМЕС
email varchar(50) НҰЛ ЕМЕС

Бірінші баған, есіңізде болса концептуалды модельбіздің деректер базамыз негізгі кілт болып табылады (яғни оның мәндері бірегей және олар жазбаны бірегей түрде анықтайды). Бірегейлікті өз бетінше ұстануға болады, бірақ бұл ұтымды емес. Бұл үшін SQL-де арнайы атрибут бар - AUTO_INCREMENT, ол деректерді қосу үшін кестеге қатынасу кезінде осы бағанның максималды мәнін есептейді, алынған мәнді 1-ге арттырады және оны бағанға қояды. Осылайша, бұл бағанда бірегей сан автоматты түрде жасалады, сондықтан NO NULL түрі артық. Сонымен, бастапқы кілті бар бағанға төлсипат тағайындайық:


varchar(20) атауы NULL ЕМЕС
email varchar(50) НҰЛ ЕМЕС
құпия сөз varchar(15) NULL ЕМЕС

Енді id_user өрісі негізгі кілт екенін көрсетуіміз керек. Ол үшін SQL қолданылады кілт сөз БАСТАУЫ-КҮЙЕУ(), кілттік өрістің аты жақша ішінде көрсетіледі. Өзгерістерді енгізейік:

id_user int(10) AUTO_INCREMENT
varchar(20) атауы NULL ЕМЕС
email varchar(50) НҰЛ ЕМЕС
құпия сөз varchar(15) NULL ЕМЕС
НЕГІЗГІ КІЛТ (ID_user)

Сонымен, кесте дайын және оның соңғы нұсқасы келесідей:

Кесте пайдаланушыларын жасау (
id_user int(10) AUTO_INCREMENT,
varchar(20) атауы NULL ЕМЕС,
email varchar(50) NULL ЕМЕС,
құпия сөз varchar(15) NULL ЕМЕС,
НЕГІЗГІ КІЛТ (ID_user)
);

Енді екінші кесте – тақырыптармен (тақырыптармен) айналысайық. Дәл осыған ұқсас, бізде келесі өрістер бар:



id_author int(10) NULL ЕМЕС
НЕГІЗГІ КІЛТ (идентификатор_тақырып)

Бірақ біздің дерекқор үлгісінде id_author өрісі шетелдік кілт болып табылады, яғни. онда тек пайдаланушылар кестесінің id_user өрісіндегі мәндер болуы мүмкін. Мұны SQL-де көрсету үшін кілт сөз бар FOREIGN-KEY(), оның келесі синтаксисі бар:

СЫРТҚЫ КІЛТ (баған_атауы_ол_шетел_кілт) СІЛТЕМЕЛЕР тектік_кесте_атауы (тек_баған_атауы);

id_author сыртқы кілт екенін көрсетейік:

id_topic int(10) AUTO_INCREMENT
тақырып_атауы varchar(100) NULL ЕМЕС
id_author int(10) NULL ЕМЕС
НЕГІЗГІ КІЛТ (идентификатор_тақырып)
ШЕТЕЛДІК КІЛТ (id_author) СІЛТЕМЕЛЕР пайдаланушылар (id_user)

Кесте дайын және оның соңғы нұсқасы келесідей:

Кесте тақырыптарын құру (
id_topic int(10) AUTO_INCREMENT,
тақырып_атауы varchar(100) НҰЛ ЕМЕС,

НЕГІЗГІ КҮЙСЕ(идентификатор_тақырып),
ШЕТЕЛДІК КІЛТ (id_author) СІЛТЕМЕЛЕР пайдаланушылар (id_user)
);

Соңғы кесте қалады - хабарламалар (хабарламалар). Мұнда бәрі ұқсас, тек екі сыртқы кілт:

Кесте жазбаларын жасау (
id_post int(10) AUTO_INCREMENT,
хабарлама мәтіні NULL ЕМЕС,
id_author int(10) NULL ЕМЕС,
id_topic int(10) НҰЛ ЕМЕС,
НЕГІЗГІ КІЛТ (id_post),
ШЕТЕЛДІК КІЛТ (id_author) СІЛТЕМЕЛЕР пайдаланушылар (id_user),
ШЕТЕЛДІК КІЛТІ (id_topic) ӘДЕБИЕТТЕР тақырыптары (id_topic)
);

Кестеде бірнеше сыртқы кілт болуы мүмкін екенін және MySQL-де бір ғана негізгі кілт болуы мүмкін екенін ескеріңіз. Бірінші сабақта біз форумның дерекқорын жойдық, оны қайтадан жасау уақыты келді.

Біз іске қосамыз MySQL сервері(Бастау - Бағдарламалар - MySQL - MySQL Server 5.1 - MySQL Command Line Client), құпия сөзді енгізіңіз, форум дерекқорын жасаңыз (дерекқор форумын жасаңыз;), пайдалану үшін оны таңдаңыз (форумды пайдаланыңыз;) және үш кестемізді жасаңыз:

Бір пәрменді Enter пернесі арқылы бірнеше жолға жазуға болатынын ескеріңіз (MySQL автоматты түрде жаңа жол таңбасын ауыстырады ->), және тек бөлгіштен кейін (нүктелі үтір) Enter пернесін басу сұраныстың орындалуына әкеледі.

Есіңізде болсын, егер сіз бірдеңе дұрыс емес жасасаңыз, DROP операторы арқылы кестені немесе бүкіл дерекқорды әрқашан тастай аласыз. бір нәрсені түзету пәрмен жолыөте ыңғайсыз, сондықтан кейде (әсіресе бастапқы кезең) Блокнот сияқты кейбір өңдегіште сұрауларды жазу оңайырақ, содан кейін оларды көшіріп, қара жәшікке қою.

Олай болса, осыған көз жеткізу үшін кестелер құрылады, топты еске түсірейік кестелерді көрсету:

Соңында, соңғы хабарламалар кестесінің құрылымын қарастырайық:

Енді DEFAULT өрісінен басқа құрылымның барлық өрістерінің мағыналары анық болады. Бұл әдепкі мән өрісі. Кейбір бағандар үшін (немесе барлығы үшін) әдепкі мәнді көрсете аламыз. Мысалы, егер бізде «Үйленген\Үйленген» деп аталатын және ENUM («иә», «жоқ») түріндегі өріс болса, онда мәндердің бірін әдепкі мәнге айналдыру орынды болар еді. Синтаксис келесідей болады:

Үйленген нөмір («иә», «жоқ») NULL әдепкі емес («иә»)

Анау. бұл кілт сөз деректер түрінен кейін бос орынмен жазылады және әдепкі мән жақшада көрсетіледі.

Бірақ біздің үстелдерге қайта оралыңыз. Енді біз кестелерімізге деректерді енгізуіміз керек. Веб-сайттарда әдетте кейбір html пішіндеріне ақпаратты енгізесіз, содан кейін кейбір тілдегі сценарий (php, java ...) бұл деректерді пішіннен шығарып, дерекқорға енгізеді. Ол мұны деректер базасына деректерді енгізу үшін SQL сұрауы арқылы жасайды. Біз әлі php-де сценарийлерді қалай жазу керектігін білмейміз, бірақ енді деректерді енгізу үшін SQL сұрауларын жіберуді үйренеміз.

Ол үшін оператор қолданылады INSERT. Синтаксисті екі жолмен қолдануға болады. Бірінші опция кестенің барлық өрістеріне деректерді енгізу үшін қолданылады:

INSERT INTO кесте_аты VALUES («бірінші_баған_мәні», «екінші_баған_мәні», ..., «соңғы_баған_мәні»);


Пайдаланушылар кестесін келесі мәндермен толтыруға тырысайық:

ПАЙДАЛАНУШЫЛАРДЫҢ МӘНДЕРІНЕ КІРУ («1», «сергей», « [электрондық пошта қорғалған]", "1111");

Екінші опция кестенің кейбір өрістеріне деректерді енгізу үшін пайдаланылады:

INSERT INTO кесте_атауы («баған_атауы», «баған_атауы») VALUES («бірінші_баған_мәні», «екінші_баған_мәні»);


Біздің пайдаланушылар кестесінде барлық өрістер қажет, бірақ бірінші өрісімізде AUTO_INCREMENT кілт сөзі бар (яғни ол автоматты түрде толтырылады), сондықтан біз бұл бағанды ​​өткізіп жіберуге болады:

INSERT INTO пайдаланушылар (аты, электрондық пошта, құпия сөз) VALUES («valera», « [электрондық пошта қорғалған]", "2222");

Егер бізде NULL түрі бар өрістер болса, яғни. қосымша, біз оларды елемеуіміз де мүмкін. Бірақ NO NULL мәні бар өрісті бос қалдыруға әрекеттенсеңіз, сервер қате туралы хабарды шығарады және сұрауды орындамайды. Сонымен қатар, деректерді енгізу кезінде сервер кестелер арасындағы байланыстарды тексереді. Сондықтан, сыртқы кілт болып табылатын өрісті қатысты кестеде жоқ мәнмен толтыра алмайсыз. Сіз мұны қалған екі кестеге деректерді енгізу арқылы тексересіз.

Бірақ алдымен тағы бірнеше пайдаланушылар туралы ақпаратты қосайық. Бір уақытта бірнеше жолды қосу үшін мәндері үтірмен бөлінген жақшаларды тізімдеу керек:

Енді екінші кестеге – тақырыптарға деректерді қосамыз. Барлығы бірдей, бірақ id_author өрісіндегі мәндер пайдаланушылар кестесінде (пайдаланушылар) болуы керек екенін есте ұстаған жөн:

Енді басқа тақырыпты қосып көрейік, бірақ пайдаланушылар кестесінде жоқ id_author (пайдаланушылар кестесіне тек 5 пайдаланушы қосқандықтан, id=6 жоқ):

Сервер қате береді және мұндай жолға кіре алмайтынын айтады, өйткені шетелдік кілт өрісінде қатысты пайдаланушылар кестесінде жоқ мән бар.

Енді хабарламалар кестесіне (хабарламалар) бірнеше жолды қосамыз, онда бізде 2 сыртқы кілт бар екенін есте ұстаймыз, яғни. Біз енгізетін id_author және id_topic олармен байланысты кестелерде болуы керек:

Сонымен, бізде деректері бар 3 кесте бар. Сұрақ туындайды - кестелерде қандай деректер сақталғанын қалай көруге болады. Келесі сабақта осылай жасаймыз.

Сұрақ: кестелерді толтыру sql сұраулары


бәлкім қате тақырып шығар, бірақ бәрібір... кестелерді сұрауларды пайдаланып толтыру .. ақаулар болды ... маған ненің дұрыс емес екенін анықтауға көмектесіңіз. «Сумен жабдықтау» деректер базасын жасау керек.
файлда тіркелген сұрауларды пайдалану арқылы - құрылған кестелер..
Мен оларды қайтадан сұраныстардың көмегімен толтыра бастадым және қателер пайда бола бастады ...
1-ші қате:
Мен tBudinki кестесінен tApartments кестесінің жалпы деректерін толтыру үшін сұраныс жазып жатырмын:

INSERT INTO tApartments([пәтер#], [стенд_коды]) Үйлерден * ТАҢДАУ
қате жібереді "INSERT INTO мәлімдемесінде #budinku өрісінің белгісіз атауы бар. Атаудың қатесіз көрсетілгенін тексеріп, әрекетті қайталап көріңіз"
Менің сұрауымда бірдеңе жетіспейді ме? бұл қатені қалай түзетуге болады???

2-ші қате
Мен tTarifi кестесін қолмен толтырдым.
max функциясын қолданатын соңғы мөлшерлемеге сұраныс келесідей:
Орнатылған_күнді, Тариф1ді, тариф_кодын tТарифтен ТАҢДАҢЫЗ ҚАЙДА Орнатылған_күн = (МАКС (МАКС) ҚОЛДАН (tТариф) ТАҢДАҢЫЗ;
ол жеке сұрау ретінде жұмыс істейді, бірақ менің түсінігім бойынша, осы сұраудан тариф_коды мәнін tpayment_plan кестесіне көшіру керек, яғни. Мен келесі сұрауды жасаймын:

tpayment_plan(тариф_коды) INSERT INTO ставка_кодын ТАҢДАУ КӨРСЕТКІШ ЖЕРДЕН (тариф_кодын ТАҢДАУ ТАҢДАУ ЖЕРДЕ ТАҢДАУ_күні = (МАКС. (Орнатылған_күн)) ҚАЙДАН ТАҢДАҢЫЗ (tRate));)

бірақ міне қателік бар (мен мұнда суретті қалай тастау керектігін түсінбедім, бірақ бәрібір түсінікті болады деп үміттенемін):

мен нені дұрыс емес істеп жатырмын??? маған айтыңызшы ... әйтпесе шайнектің қателіктеріңізді шешуі қиын

Тіркелген файл ( in.txt- 2Кб)

Жауап: lisica198808,

Бірінші сұрауда tApartments және tHouses құрылымы (бағандардың саны мен түрлері) сәйкес келмеуі мүмкін. Жұлдызшаның орнына ТАҢДАУ ішінде tBudinka кестесіндегі tApartments-те пайдаланғыңыз келетін бағандардың атауларын нақты тізімдеңіз.

Екінші сұрауда topay_plan бағдарламасында бірнеше бағандар болуы мүмкін, олардың кейбіреулеріне NULL мәнін пайдалануға рұқсат етілмейді. Мәнді тек бір бағанға қосасыз (rate_code), қалған сұрауда әдепкі мәндер (егер олар анықталған болса) немесе NULL ауыстырылады. Демек, қате.

sdku кеңесін тыңдауды ұмытпаңыз.

Сұрақ: Кестені толтыру кезінде есептегіштің ақаулары


Қайырлы күн
Мен есептегіш өрісі бар кестені толтыру процедурасын жасаймын
SET IDENTITY_INSERT dbo.Clients ON параметрін қосқаныма қарамастан қате береді
T-SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 alter proc [ dbo] .[ AddClient] @fiok varchar (50 ) , @telk varchar (50 ) , @skidk char (3 ) @kklient int set @kklient = (dbo.Clients ішінен макс (ClientID) таңдаңыз) + 1 SET IDENTITY_INSERT dbo.Clients ON insert dbo.Clients мәндерін (@kklient, @fiok, @telk, @skidk) SET IDENTITY_INSERT dbo.Clients OFF таңдаңыз. «Қосылған клиент:»+ @fiok + "Тел:" + @telk + "Жеңілдік:" + @skidk

Қате - "dbo.Clients" кестесіндегі сәйкестік бағанының мәні бағандар тізімін пайдаланғанда және IDENTITY_INSERT ҚОСУ күйіне орнатылғанда ғана анық көрсетілуі мүмкін.

Жауап:

Хабарлама _JoNi_

Осылай тырысты, енді орындалған кезде ол мұны береді
Ақылсыз сұрақтар үшін кешіріңіз, sql тілін үйрене бастадым)

Енгізілетін кестенің атынан кейін үтірмен бөлінген өріс атауларын жаза аласыз ба?

Сұрақ: толтыру Сөз кестелерібетбелгі деректерімен Қол жеткізу сұрауы- шешімін іздеу


Сәлем жақсы адамдар!

Интернетте мен кестені толтырудың жұмыс мысалын таптым Word деректеріБетбелгілерді пайдаланып Access қолданбасынан. Ол жұмыс істейді (Example.zip).
Өкінішке орай, мен Access бағдарламасында өз бетімше оқытамын және көп нәрсені білмеймін...
Менің дерекқорымда (WORD.zip) жұмыс мысалынан шешімді енгізуге қалай тырыссам да, мен үшін ештеңе жұмыс істемейді.
Мен мысалдағы элементтерді функциялар түрінде енгіземін, өйткені ол онда жүзеге асырылады және мен оларға жүгінемін - бәріне ант етемін.
Мен осы функциялардың бөліктерін өз кодыма енгіземін - ол қайтадан ант береді!

Кестеге емес, нені енгізу керек, ол бетбелгілерді керемет ауыстырады (егер сіз кестені толтыруға қатысты барлық нәрсені кодтан алып тастасаңыз, ол жұмыс істейді).

Менің күшім енді жоқ

Өтінемін, мейірімді адамдар, менің кодымды бәрі жұмыс істейтін етіп түзетіңіз!
Неліктен табысқа жете алмағанымды түсіндіріп берсеңіз, мен сізді ең ақылды және жанашыр деп санаймын.
Access2010

Алдын ала рахмет!!!

P.S. Менің дерекқорымда Мәскеу көшелері, Тегі, Аты, Әкесінің аты, Өлшем бірліктері (ресми аббревиатуралар) көрсетілген кестелер бар - кімге қажет болса, оны пайдаланыңыз.

Жауап:содан кейін 2 жолдан кейін үзіліс болады (енгізу жолында)
--
Мен кеше жұмыс істеудің екінші нұсқасын ала алмадым( corbis. тармақ 2)
бірінші (бастапқы) бір сағат сендіру (шамамен 10 қате)

Сұрақ: Кестені деректермен толтыру қатесі


NewCompany деректер базасы құрылды, онда EmployeeSchema.Employee кестесі жасалады, мәселе кестені бағдарламалық түрде толтырған кезде соңғы бағанды ​​бос қалдыру керектігін ескерсек, қателер пайда болады.
Мен оны қалай түзететінімді білмеймін. Өтінемін көмектесіңіз.

Кесте құру
NewCompany_Ezh ҚОЛДАНУ;
ӨТ

КЕСТЕ ЖАСАУ EmployeeSchema.Employee
EmpID int NULL ЕМЕС,
LName varchar(20) NULL ЕМЕС,
FName varchar(20) NULL ЕМЕС,
Тақырып varchar(20) NULL,
Туған күні NULL,
EmpDate күні NULL,
Жалақы ондық(18, 2) НҰЛ ЕМЕС,
DepID int NULL ЕМЕС,
OrgNode иерархиясы NULL,
ӨТ

толтыру
NewCompany_Ezh ҚОЛДАНУ;
ӨТ
DECLARE @child hierarchyid,
@manager hierarchyid = hierarchyid::GetRoot()

Түбірлік деңгей – директор

(1, Н"Иванов", Н"Иван", Н"Директор", "1975-05-07", "2009-05-06", 30000.00, @manager)

Келесі деңгей – депутаттар

EmployeeSchema.Қызметкерлердің МӘНДІЛЕРІНЕ ЕНГІЗУ
(2, Н"Петров", Н"Петр", Н"Директордың орынбасары", "1969-10-07", "2005-07-07", 25000.00, @child)

EmployeeSchema.Қызметкерлердің МӘНДІЛЕРІНЕ ЕНГІЗУ
(3, Н"Сидоров", Н"Сидор", Н"Директордың орынбасары", "1981-05-05", "2009-09-09", 25000.00, @child)

SELECT @child = @manager.GetDescendant(@child, NULL)

EmployeeSchema.Қызметкерлердің МӘНДІЛЕРІНЕ ЕНГІЗУ
(4, Н"Еремін", Н"Ерема", Н"Директордың орынбасары", "1986-11-01", "2009-10-10", 25000.00, @child)

Иерархияның келесі деңгейі
SELECT @manager = OrgNode
FROM EmployeeSchema. Employee WHERE EmpID = 4
SELECT @child = @manager.GetDescendant(NULL, NULL)

EmployeeSchema.Қызметкерлердің МӘНДІЛЕРІНЕ ЕНГІЗУ
(5, Н"Александров", Н"Александр", Н"Көмекші", "1979-01-01", "2008-01-01", 20000.00, @child)

SELECT @child = @manager.GetDescendant(@child, NULL)
EmployeeSchema.Қызметкерлердің МӘНДІЛЕРІНЕ ЕНГІЗУ
(6, Н"Андреев", Н"Андрей", Н"Көмекші", "1985-04-12", "2008-01-01", 20000.00, @child)
ӨТ

Жауап:

Хабарлама Маргарет98

NewCompany дерекқоры жасалды

Бұл сөзсіз MySQL туралы, MS SQL туралы емес

Сұрақ: Кестені толтыру кезіндегі №1062 қате


Қайырлы күн.
Кестені толтырған кезде келесі қатені береді мәселені шешуге көмектесіңізші:
,
Негізгі кілт – көрсетілген.
Бір қызық, егер толтыру кезінде сіз id_zanyt (pk) 1-ден емес, 2-ден бастасаңыз, онда ол қате бермейді ...

Жауап:Бәрі шешілді!)) тақырыпты жою керек!

Сұрақ: Дерекқордағы кестені пішіндегі өрістен (TextBox) толтыру


Сәлеметсіз бе, мен Интернетте TextBox-тен кестені пішінде толтыру тақырыбын іздеп жүріп, мақалаға тап болдым.

және мен мұны не үшін жазу керек екенін түсінбеймін? егер пішін мен кесте бір дерекқорда болса, кодтың бұл бөлігі басқаша көрінеді ме?
Dim z Жаңа OleDb.OleDbConnection ретінде( "Провайдер=Microsoft.Jet.OLEDB.4.0;Дерек көзі=C:1Қолданба Microsoft кеңсесі Access.mdb") «Дерекқорға қосылуды орнату. z.Open() «Ашық байланыс.
және екінші

Жаңа OleDb.OleDbCommand ретінде күңгірттеу( "ЖАҢАРТУ [1-кесте] SET [Field1] = " "& " " & TextBox1.Text & " " WHERE [Код] = 1" , z)
z айнымалысы маған не үшін қажет?

Сұрақ: Кестелерді автоматты түрде толтыру


Сәлеметсіз бе
Өтінемін айтыңызшы
Менде sql-де кесте бар. 3 баған (өріс) біріншісі автоматты түрде толтырылады
Мен 2 және 3 жолдарды сұраумен толтырғым келеді
осылайша 2 өріс 0-ден 99-ға дейін 3-ке өседі
3 өрісі 3-тен 102-ге дейін 3-ке өседі
яғни бірден үлкен толтырылған үстелді алыңыз
Мен қалай өтініш жасау керектігін түсінбеймін
тырысты
негізгі атауды пайдалану;
Runnums ішіне кірістіру(өріс2, өріс3)
мәндер(0,3)
бірақ ол тек бір жолды толтырады
алдын-ала рахмет

Мәліметтер қорымен жұмыс кестелерді және олардағы мәліметтерді өзгертуге тікелей байланысты. Бірақ әрекеттерді бастамас бұрын кестені жасау керек. Бұл процесті автоматтандыру үшін арнайы – «КЕСТЕ ҚҰРУ» бар.

Бірінші нәрсе!

MS SQL «CREATE TABLE» пәрменін пайдаланып кестелерді құру процесімен айналыспас бұрын, функцияны қолданар алдында нені білу керек екеніне тоқталған жөн.

Ең алдымен, кестенің атауын ойлап табу керек - ол дерекқордағы басқалармен салыстырғанда бірегей болуы керек және бірнеше ережелерді сақтау керек. Атау (a-z) әрпінен басталуы керек, одан кейін кез келген әріптер, сандар және астыңғы сызулар қойылуы керек және алынған сөз тіркесі сақталған сөз болмауы керек. Кесте атауының ұзындығы 18 таңбадан аспауы керек.

Атау туралы шешім қабылдағаннан кейін құрылымды әзірлеу керек: бағандарға атауларды ойлап табыңыз, оларда қолданылатын деректер түрін және қай өрістерді толтыру керектігін ойластырыңыз. Сондай-ақ шетелдік және бастапқы кілттердің өрістерін, сондай-ақ деректер мәндеріне ықтимал шектеулерді дереу анықтау керек.

Кестенің қалған нюанстарын оңай түзетуге болады, сондықтан кестені құру кезеңінде олар толығымен ойластырылмауы мүмкін.

Синтаксис

Кестенің құрылымын дамыта отырып, оны құруға кірісуге болады. Мұны қолдану өте оңай SQL функциясы«КЕСТЕ ҚҰРУ». Онда пайдаланушы бұрын ойлап тапқан кесте атауын және олардың әрқайсысының түрі мен атауын көрсете отырып, бағандар тізімін көрсетуі қажет. Функция синтаксисі келесідей:

КЕСТЕНІ ЖАСАУ кесте_атауы
((баған_аты деректер түрі …| кесте_шегі)
[,(баған_аты деректер түрі …| кесте_шектеуі)]…)

Функцияны құруда қолданылатын аргументтер мынаны білдіреді:

  • table_name - кесте аты
  • баған_атауы - баған атауы
  • деректер түрі – осы өрісте қолданылатын деректер түрі
  • DEFAULT — әдепкі бағанда қолданылатын өрнек.

Тағы екі функция аргументін пайдалануға болады:

  • colum_constraint - баған параметрлері
  • table_constraint - кесте параметрлері

Оларда пайдаланушы жұмысқа қажетті шектеулерді немесе кестені толтыру шарттарын көрсете алады.

Кестелерді құрудың ерекшеліктері

Функциясы бар сұранысты жазғанда, кейде өрістерді толтыру ережелерін орнату қажет. Ол үшін белгілі бір шарттар жинағын анықтайтын арнайы функция атрибуттарын қосу керек.

Ұяшықта бос мән болуы мүмкін екенін анықтау үшін бағанның атын және түрін көрсеткеннен кейін түйінді сөздердің бірін жазу керек: NULL (болуы мүмкін бос мәндер) немесе NO NULL (өріс толтырылуы керек).

Кестені құру кезінде көп жағдайда екі бірдей жазба болмас үшін әрбір жазбаны біріктіру қажет. Бұл үшін жолды нөмірлеу жиі қолданылады. Пайдаланушыдан кестеде бар соңғы нөмірді білуді талап етпеу үшін «КЕСТЕ ЖАСАУ» функциясында бағанды ​​көрсету жеткілікті. бастапқы кілтсәйкес өрістен кейін «Негізгі кілт» түйінді сөзін жазу арқылы. Көбінесе кестелер бір-біріне бастапқы кілт арқылы қосылады.

Сыртқы кілт қасиеті «FOREIGN KEY» Бастапқы кілтпен байланысты қамтамасыз ету үшін пайдаланылады. Бұл сипатты баған үшін көрсету арқылы өрісте сол немесе басқа кестенің бастапқы кілт бағанында табылған мәндердің біріне сәйкес келетін мән бар екеніне көз жеткізуге болады. Осылайша, деректердің сәйкестігін қамтамасыз етуге болады.

Берілген жиынға немесе анықтамаға қарсы тексеруді қамтамасыз ету үшін CHECK төлсипатын пайдаланыңыз. Ол функция аргументтерінің тізімінде соңғы болып жазылады және жеке параметр ретінде кейбір мәнге ие болады. логикалық өрнек. Оның көмегімен мүмкін мәндер тізімін шектеуге болады, мысалы, кестенің «Гендер» өрісінде тек «M» және «F» әріптерін пайдалану.

Ұсынылғандардан басқа, функцияның көптеген нақты атрибуттары бар, бірақ олар іс жүзінде әлдеқайда аз қолданылады.

Мысалдар

Функцияның қалай жұмыс істейтінін толық түсіну үшін CREATE TABLE (SQL) қалай жұмыс істейтінін іс жүзінде қарастырған жөн. Төмендегі мысал суретте көрсетілген кестені жасайды:

КЕСТЕНІ ЖАСАУ Теңшелетін
(ID CHAR(10) NULL ЕМЕС Бастапқы кілт,
Арнаулы_атауы CHAR(20),
Арнаулы_мекенжай CHAR(30),
Арнайы_қаланың CHAR(20),
Арнайы_ел CHAR(20),
ArcDateCHAR(20))

Көріп отырғаныңыздай, параметр мүмкін болмауыұяшық мәндерін (NULL) алып тастауға болады, себебі бұл әдепкі.

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!