Kuvaile eriä
T-SQL-erät ovat yhden tai useamman T-SQL-lausekkeen kokoelmia, jotka asiakas lähettää SQL Serveriin yhtenä yksikkönä. SQL Server toimii erän kaikissa lausekkeissa samaan aikaan koodin jäsentämisen, optimoinnin ja suorittamisen kanssa.
Jos olet raporttien kirjoittaja, joka yleensä kirjoittaa kyselyt lauseiden SELECT eikä menettelyjen avulla, on silti tärkeää ymmärtää erärajat. Nämä rajat vaikuttavat työhösi muuttujien ja parametrien parissa tallennetuissa proseduureissa ja muissa rutiineissa. Esimerkiksi muuttuja on määritettävä samassa erässä, jossa siihen viitataan. Siksi on tärkeää tunnistaa, mitä erä sisältää.
Asiakassovellus rajata erät. Se, miten erän loppu merkitään, määräytyy asiakasohjelman asetusten mukaan. Microsoftin asiakkaille, kuten SQL Server Management Studio (SSMS) ja SQLCMD, avainsana on GO.
Tässä esimerkissä on kaksi erillistä erää, jotka kumpikin päättyvät lauseeseen GO :
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
Erän päätetoiminto GO ei ole T-SQL-avainsana, vaan SSMS tunnistaa sen erän lopun ilmaisemiseksi.
Pidä mielessä kaksi tärkeää seikkaa, kun työskentelet T-SQL-eräiden kanssa:
- Erät ovat muuttujan laajuuden rajoja, mikä tarkoittaa, että yhdessä erässä määritelty muuttuja voidaan viitata vain saman erän toisella koodilla
- Jotkut lauseet, tyypillisesti datamäärittelylauseet kuten
CREATE VIEW,CREATE FUNCTION, jaCREATE PROCEDUREjoita ei voi yhdistää muiden kanssa samassa erässä.
Erien käsitteleminen
Erä on kokoelma T-SQL-lausekkeita, jotka lähetetään SQL Serveriin jäsentämistä ja suorittamista varten. Eräiden jäsentämisen ymmärtäminen on hyödyllistä virheviestien ja käyttäytymisen tunnistamisessa. Kun asiakas lähettää erän, esimerkiksi kun painat Suorita-painiketta SSMS:ssä, SQL Server -moduuli jäsentää erän syntaksivirheiden varalta. Virheet johtavat koko erän hylkäämiseen; erässä ei suoriteta osittaista laskutoimitusta.
Jos erä läpäisee syntaksitarkistuksen, SQL Server suorittaa muita vaiheita, ratkaisee objektien nimet, tarkistaa käyttöoikeudet ja optimoi koodin suorittamista varten. Kun tämä prosessi on valmis ja suoritus alkaa, lausekkeet onnistuvat tai epäonnistuvat yksitellen. Tämä on tärkeä kontrasti syntaksin tarkistuksen kannalta. Kun ajonaikainen virhe tapahtuu yhdellä rivillä, seuraava rivi voi silti käynnistyä, ellei koodiin lisätä virheenkäsittelyä.
Esimerkiksi seuraava erä sisältää syntaksivirheen:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Se antaa tämän virhesanoman:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
Virhe ilmeni rivillä 1, mutta koko erä hylätään, eikä suoritusta jatkaa rivillä 2. Vaikka jokainen INSERT lause olisi käännetty ja syntaksivirhe tapahtuisi toisella rivillä, etulinjaa ei suoritettaisi, koska koko erä hylättäisiin.
Sen sijaan tässä korjatussa erässä ei ole virhettä:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Aiemmat otokset käyttävät INSERT lauseita, eivät SELECT siksi, että muokkauslauseet ryhmitellään useammin eriksi.