ILMOITA KURSORI (Transact-SQL)

  • 14.3.2017
  • 13 minuuttia aikaa lukea
    • c
    • r
    • i
    • M
    • m
    • +6

Koskee: SQL Server -palvelinta (kaikki tuetut versiot ) Azure SQL-tietokanta

Määrittää Transact-SQL-palvelimen kohdistimen attribuutit, kuten sen vierityskäyttäytymisen ja kyselyn, jota käytetään tulosjoukon rakentamiseen kohdistin toimii. DECLARE CURSOR hyväksyy sekä ISO-standardiin perustuvan syntaksin että syntaksin käyttämällä joukkoa Transact-SQL-laajennuksia.

Transact-SQL-syntaksin yleissopimukset

Syntaksi

Huomautus

Jos haluat tarkastella Transact-SQL-syntaksia SQL Server 2014: lle ja sitä vanhemmille, katso edellisten versioiden ohjeet .

Argumentit

kohdistimen_nimi
Määrittää Transact-SQL-palvelimen kohdistimen nimen. kohdistimen_nimen on oltava tunnisteiden sääntöjen mukainen.

INSENSITIVE
Määrittää kohdistimen, joka tekee väliaikaisen kopion kohdistimen käyttämistä tiedoista. Kaikkiin kohdistimen pyyntöihin vastataan tästä väliaikaisesta taulukosta tempdb: ssä; siksi perustaulukoihin tehdyt muutokset eivät heijastu tähän kohdistimeen tehtyjen hakujen palauttamiin tietoihin, ja tämä kohdistin ei salli muutoksia. Kun käytetään ISO-syntaksia, jos INSENSITIVE jätetään pois, sitoutuneet poistot ja alla oleviin taulukoihin tehdyt päivitykset (kuka tahansa käyttäjä) heijastuvat myöhemmissä hakeissa.

SCROLL
Määrittää, että kaikki hakuvaihtoehdot (FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE) ovat käytettävissä. Jos SCROLL ei ole määritetty ISO-standardissa DECLARE CURSOR, NEXT on ainoa tuettu hakuvaihtoehto . SCROLL ei voida määrittää, jos myös FAST_FORWARD on määritetty. Jos SCROLL ei määritetä, vain hakuvaihtoehto NEXT on käytettävissä ja kohdistin muuttuu FORWARD_ONLY.

select_statement
Onko vakio SELECT käsky, joka määrittää kohdistimen tulosjoukon. Avainsanat FOR BROWSE ja INTO eivät ole sallittuja kohdistimen ilmoituksen select_statement-tilassa.

SQL Server muuntaa implisiittisesti kohdistin toiseen tyyppiin, jos select_statement-lausekkeet ovat ristiriidassa pyydetyn kohdistintyypin toimintojen kanssa.

VAIN LUE
estää tämän kursorin kautta tehtävät päivitykset. Kohdistimeen ei voi viitata WHERE CURRENT OF -lausekkeessa lausekkeessa UPDATE tai DELETE. Tämä vaihtoehto ohittaa päivitettävän kohdistimen oletusominaisuudet.

cursor_name
Onko Transact-SQL-palvelimen kohdistimen nimi määritetty. kohdistimen_nimen on oltava tunnisteiden sääntöjen mukainen.

LOCAL
Määrittää, että kohdistimen laajuus on paikallinen erälle, tallennetulle toiminnolle tai liipaisimelle, johon kohdistin luotiin. Kohdistimen nimi on kelvollinen vain tässä laajuudessa. Kohdistimeen voidaan viitata paikallisten kursorimuuttujien avulla erässä, tallennetussa menettelyssä tai laukaisussa tai tallennetussa toimintoparametrissa OUTPUT. OUTPUT -parametria käytetään siirtämään paikallinen kohdistin takaisin kutsuvalle erälle, tallennetulle menettelylle tai liipaisimelle, joka voi määrittää parametrin kohdistimen muuttujalle viittaamaan kohdistimeen tallennetun menettelyn jälkeen. päättyy. Kohdistinta jaetaan epäsuorasti, kun erä, tallennettu menettely tai liipaisin päättyy, paitsi jos kohdistinta siirrettiin takaisin parametri OUTPUT. Jos se välitetään takaisin OUTPUT -parametrissa, kohdistin jaetaan, kun viimeinen siihen viittaava muuttuja jaetaan tai se menee soveltamisalan ulkopuolelle.

GLOBAL
Määrittää, että kohdistimen laajuus on maailmanlaajuinen yhteydelle. Kohdistimen nimeen voidaan viitata missä tahansa yhteyden suorittamassa tallennetussa menettelyssä tai erässä. Kohdistinta jaetaan implisiittisesti vain yhteyden katkaisemisen yhteydessä.

Huomaa

Jos kumpikaan GLOBAL tai LOCAL on määritetty, oletusta ohjataan asettamalla oletusarvo paikalliselle kohdistintietokannalle.

FORWARD_ONLY
Määrittää, että kohdistin voi siirtyä vain eteenpäin ja vierittää ensimmäisestä viimeiseen riviin. FETCH NEXT on ainoa tuettu hakuvaihtoehto. Kaikki nykyisen käyttäjän tekemät (tai muiden käyttäjien tekemät) lisäys-, päivitys- ja poistolausekkeet, jotka vaikuttavat tulosjoukon riveihin, näkyvät rivejä noudettaessa.Koska kohdistinta ei voi vierittää taaksepäin, tietokannan riveihin tehdyt muutokset rivin noutamisen jälkeen eivät ole näkyvissä kohdistimen läpi. Vain eteenpäin kohdistimet ovat oletusarvoisesti dynaamisia, mikä tarkoittaa, että kaikki muutokset havaitaan nykyisen rivin käsittelyn aikana. Tämä nopeuttaa kohdistimen avaamista ja mahdollistaa tulosjoukon näyttämään alla oleviin taulukoihin tehdyt päivitykset. Vaikka vain eteenpäin osoittavat kursorit eivät tue selausta taaksepäin, sovellukset voivat palata asetetun tuloksen alkuun sulkemalla ja avaamalla kohdistimen uudelleen. Jos FORWARD_ONLY on määritetty ilman STATIC, KEYSET tai DYNAMIC avainsanat, kohdistin toimii dynaamisena kohdistimena. Kun FORWARD_ONLY eikä SCROLL ei määritetä, oletusarvo on FORWARD_ONLY, paitsi jos avainsanat STATIC, KEYSET tai DYNAMIC määritetään. STATIC, KEYSET ja DYNAMIC kohdistimet ovat oletusarvoisesti SCROLL. Toisin kuin tietokannan sovellusliittymät, kuten ODBC ja ADO, FORWARD_ONLY tuetaan STATIC, KEYSET, ja DYNAMIC Transact-SQL-kohdistimet.

STATIC
Määrittää, että kohdistin näyttää aina tulosjoukon sellaisena kuin se oli, kun kohdistin avattiin ensimmäisen kerran, ja tekee väliaikainen kopio kursorin käyttämistä tiedoista. Kaikkiin kohdistimen pyyntöihin vastataan tästä väliaikaisesta taulukosta tempdb: ssä. Siksi perustaulukoihin tehdyt lisäykset, päivitykset ja poistot eivät näy tälle kohdistimelle tehtyjen hakujen palauttamissa tiedoissa, ja tämä kohdistin ei havaitse muutoksia kohdistimeen kohdistettuihin tulokseen asetettuun jäsenyyteen, järjestykseen tai arvoihin . Staattiset kohdistimet saattavat havaita omat päivityksensä, poistaa ja lisätä, vaikka niitä ei vaadita niin, esimerkiksi, jos staattinen kohdistin hakee rivin, ja toinen sovellus päivittää sitten kyseisen rivin. Jos sovellus hakee rivin staattiselta kohdistimelta, sen näkemät arvot eivät muutu, huolimatta toisen sovelluksen tekemistä muutoksista. Kaikentyyppisiä vierityksiä tuetaan.

KEYSET
Määrittää, että kohdistimen jäsenyydet ja rivien järjestys ovat kiinteät, kun kohdistin avataan. Avainsarja, joka yksilöi rivit yksilöllisesti, on rakennettu tempdb: n taulukkoon, joka tunnetaan nimellä näppäimistö. Tämä kohdistin tarjoaa toiminnallisuuden staattisen ja dynaamisen kohdistimen välillä kyvyssä havaita muutokset. Staattisen kohdistimen tavoin se ei aina havaitse muutoksia tulosjoukon jäsenyydessä ja järjestyksessä. Dynaamisen kohdistimen tavoin se havaitsee muutokset tulosjoukon rivien arvoihin. Näppäinohjattuja kohdistimia ohjataan joukolla yksilöllisiä tunnisteita (avaimet), jotka tunnetaan nimellä näppäimistö. Avaimet on rakennettu sarakejoukosta, joka yksilöi tulosjoukon rivit yksilöllisesti. Näppäimistö on joukko avainarvoja kaikista kyselylausekkeen palauttamista riveistä. Näppäimistöohjattuilla kohdistimilla avain rakennetaan ja tallennetaan jokaiselle kohdistimen riville ja tallennetaan joko työasemalle tai palvelimelle. Kun avaat jokaisen rivin, tallennettua avainta käytetään hakemaan nykyiset tietoarvot tietolähteestä. Näppäimistöohjatussa kohdistimessa tulosjoukon jäsenyys jäädytetään, kun näppäimistö on täynnä. Tämän jälkeen jäsenyyteen vaikuttavat lisäykset tai päivitykset eivät ole osa tulosjoukkoa ennen kuin se avataan uudelleen. Muutokset data-arvoihin (joko näppäimistön omistajan tekemät tai muut prosessit) ovat näkyvissä, kun käyttäjä selaa tulosjoukkoa:

  • Jos rivi poistetaan, yritys noutaa rivi palauttaa arvon @@FETCH_STATUS arvoksi -2, koska poistettu rivi näkyy aukkona tulosjoukossa. Rivin avain on olemassa avaimesarjassa, mutta riviä ei enää ole tulosjoukossa.
  • Kohdistimen ulkopuolelle (muilla prosesseilla) tehdyt lisäykset näkyvät vain, jos kohdistin suljetaan ja avataan uudelleen. Kohdistimen sisäpuolelta tehdyt lisäosat näkyvät tulosjoukon lopussa.
  • Kohdistimen ulkopuoliset avainarvojen päivitykset muistuttavat vanhan rivin poistamista ja uuden rivin lisäystä. Uusia arvoja sisältävä rivi ei ole näkyvissä, ja yrittää hakea rivi vanhoilla arvoilla palauttaa arvon @@FETCH_STATUS arvoksi -2. Uudet arvot näkyvät, jos päivitys tehdään kohdistimen kautta määrittämällä lauseke WHERE CURRENT OF.

Huomaa

Jos kysely viittaa ainakin yhteen taulukkoon, jossa ei ole yksilöllistä hakemistoa, avainsarjan kohdistin muunnetaan staattiseksi kohdistimeksi.

DYNAAMINEN
Määrittää kohdistimen, joka heijastaa kaikkia tiedostoon tehtyjä muutoksia tulosrivit asetetaan, kun vierität kohdistinta ja haet uutta tietuetta riippumatta siitä, tapahtuvatko muutokset kohdistimen sisäpuolelta vai muilta käyttäjiltä. Siksi kaikki kaikkien käyttäjien tekemät lisäys-, päivitys- ja poistolausekkeet näkyvät kohdistimen läpi.Rivien data-arvot, järjestys ja jäsenyys voivat muuttua jokaisessa hakemuksessa. ABSOLUTE -hakuvaihtoehtoa ei tueta dynaamisilla kohdistimilla. Kohdistimen ulkopuolella tehdyt päivitykset eivät ole näkyvissä ennen kuin ne on tehty (paitsi jos kohdistimen tapahtuman eristystasoksi on asetettu UNCOMMITTED). Oletetaan esimerkiksi, että dynaaminen kohdistin hakee kaksi riviä ja toisen sovelluksen sitten päivittää yhden näistä riveistä ja poistaa toisen. Jos dynaaminen kohdistin hakee sitten nämä rivit, se ei löydä poistettua riviä, mutta se näyttää päivitetyn rivin uudet arvot.

FAST_FORWARD
Määrittää FORWARD_ONLY, READ_ONLY kohdistin suorituskyvyn optimoinnilla. FAST_FORWARD ei voida määrittää, jos myös SCROLL tai FOR_UPDATE on määritetty. Tämän tyyppinen kohdistin ei salli tietojen muokkaamista kohdistimen sisältä.

Huomaa

Sekä FAST_FORWARD että FORWARD_ONLY voidaan käyttää samassa lauseessa DECLARE CURSOR.

READ_ONLY
Estää tämän kohdistimen kautta tehtävät päivitykset. Kohdistimeen ei voi viitata WHERE CURRENT OF -lausekkeessa lausekkeessa UPDATE tai DELETE. Tämä vaihtoehto ohittaa päivitettävän kohdistimen oletusominaisuudet.

SCROLL_LOCKS
Määrittää, että kohdistimen kautta tehdyt sijoitetut päivitykset tai poistot onnistuvat. SQL Server lukitsee rivit, kun ne luetaan kohdistimeen, jotta varmistetaan niiden saatavuus myöhempiin muutoksiin. SCROLL_LOCKS ei voida määrittää, jos myös FAST_FORWARD tai STATIC on määritetty.

OPTIMISTIC
Määrittää, että kohdistimen kautta tehdyt sijoitetut päivitykset tai poistot eivät onnistu, jos riviä on päivitetty sen jälkeen, kun se on luettu kohdistimeen. SQL Server ei lukitse rivejä, kun ne luetaan kohdistimeen. Sen sijaan se käyttää aikaleimasarakkeen arvojen vertailuja tai tarkistussumman arvoa, jos taulukossa ei ole aikaleimasaraketta, selvittääkseen, onko riviä muokattu sen jälkeen, kun se oli luettu kohdistimeen. Jos riviä muokattiin, yritetty sijoittaa päivitys tai poisto epäonnistuu. OPTIMISTIC ei voida määrittää, jos myös FAST_FORWARD on määritetty.

TYPE_WARNING
Määrittää, että varoitusviesti lähetetään asiakkaalle, kun kohdistin muutetaan implisiittisesti pyydetystä tyypistä toiseen.

select_statement
Onko standardi SELECT-käsky, joka määrittelee kohdistimen tulosjoukon. Avainsanat COMPUTE, COMPUTE BY, FOR BROWSE ja INTO eivät ole sallittuja kohdistimen ilmoituksen select_statement -kohdassa.

Huomaa

Voit käyttää kyselyvihjettä kohdistimen ilmoituksessa; Jos kuitenkin käytät myös lauseketta FOR UPDATE OF, määritä OPTION (<query_hint>) FOR UPDATE OF -kohdan jälkeen.

SQL Server muuntaa kohdistimen implisiittisesti toiseksi tyypiksi, jos select_statement-lausekkeet ovat ristiriidassa pyydetyn kohdistintyypin toiminnallisuuden kanssa. Lisätietoja on ohjeaiheessa Implisiittiset kohdistimen muunnokset.

Huomautuksia

DECLARE CURSOR määritetään Transact-SQL-palvelimen kohdistimen attribuutit, kuten sen vierityskäyttäytyminen ja kysely, jota käytetään kohdistamaan tulosjoukko, johon kohdistin toimii. OPEN -lauseke täyttää tulosjoukon ja FETCH palauttaa rivin tulosjoukosta. CLOSE -lauseke vapauttaa kohdistimeen liittyvän nykyisen tulosjoukon. DEALLOCATE -lauseke vapauttaa kohdistimen käyttämät resurssit.

DECLARE CURSOR -käskyn ensimmäinen muoto käyttää ISO-standardia. syntaksin osoittimen käyttäytymisen ilmoittamiseksi. DECLARE CURSOR -sovelluksen toinen muoto käyttää Transact-SQL-laajennuksia, joiden avulla voit määrittää kohdistimet käyttämällä samoja kohdistintyyppejä, joita käytetään ODBC: n tai ADO: n tietokannan API-kohdistintoiminnoissa.

Et voi sekoittaa kahta lomaketta. Jos määrität avainsanat SCROLL tai INSENSITIVE ennen avainsanaa CURSOR, et voi käyttää mitään avainsanat avainsanojen CURSOR ja FOR <select_statement> välissä. Jos määrität avainsanoja CURSOR ja FOR <select_statement> avainsanojen väliin, et voi määrittää SCROLL tai INSENSITIVE ennen avainsanaa CURSOR.

Jos Transact-SQL-syntaksia käyttävä DECLARE CURSOR ei määritä READ_ONLY, OPTIMISTIC tai SCROLL_LOCKS, oletusarvo on seuraava:

  • Jos SELECT -lauseke ei tue päivityksiä (riittämättömät käyttöoikeudet, etätaulukoiden käyttö, jotka eivät tue päivityksiä, ja niin edelleen), kohdistin on READ_ONLY.

  • STATIC ja FAST_FORWARD kohdistimet ovat oletusarvoisesti READ_ONLY.

  • DYNAMIC ja KEYSET kohdistimet ovat oletusarvoisesti OPTIMISTIC .

Kohdistimen nimiin voi viitata vain muilla Transact-SQL-käskyillä. Tietokannan API-toiminnot eivät voi viitata niihin. Esimerkiksi kohdistimen ilmoituksen jälkeen kohdistimen nimeen ei voida viitata OLE DB-, ODBC- tai ADO-funktioista tai -menetelmistä. Kohdistinrivejä ei voi noutaa sovellusliittymien hakutoiminnoilla tai -menetelmillä; rivit voidaan noutaa vain Transact-SQL FETCH -käskyillä.

Kun kohdistin on ilmoitettu, näitä järjestelmään tallennettuja menettelytapoja voidaan käyttää osoittimen ominaisuuksien määrittämiseen.

Järjestelmään tallennetut menettelyt Kuvaus
sp_cursor_list Palauttaa luettelon yhteydellä tällä hetkellä näkyvistä kohdistimista ja niiden attribuuteista.
sp_describe_cursor Kuvaa kohdistimen attribuutteja, kuten onko se vain eteenpäin vai vieritettävä kohdistin.
sp_describe_cursor_columns Kuvaa kohdistimen tulosjoukon sarakkeiden attribuutteja.
sp_describe_cursor_tables Kuvaa pääsytaulukot kohdistin.

Muuttujia voidaan käyttää osana ilmoitettavaa select_statementia. kohdistin. Kohdistimen muuttujien arvot eivät muutu, kun kohdistin on ilmoitettu.

Käyttöoikeudet

DECLARE CURSOR -käyttöoikeudet oletusarvoisesti käyttäjälle, jolla on SELECT käyttöoikeudet kohdistimessa käytettäviin näkymiin, taulukoihin ja sarakkeisiin.

Rajoitukset ja rajoitukset

Et voi käyttää kohdistimia tai laukaisimia taulukossa, jossa klusteroitu pylväskaupan hakemisto. Tätä rajoitusta ei sovelleta ryhmittymättömiin sarakekauppahakemistoihin; voit käyttää kohdistimia ja laukaisimia taulukossa, jossa ei ole klustereita sarakekauppahakemistoa.

Esimerkkejä

A. Yksinkertaisen kohdistimen ja syntaksin käyttäminen

Tämän kohdistimen alussa luotu tulosjoukko sisältää kaikki taulukon rivit ja sarakkeet. Tämä kohdistin voidaan päivittää, ja kaikki päivitykset ja poistot esitetään tätä kohdistinta vastaan tehdyissä hakemuksissa. FETCH NEXT on ainoa käytettävissä oleva haku, koska vaihtoehtoa SCROLL ei ole määritelty.

B. Sisäkkäisten kohdistinten käyttäminen raporttitulosten tuottamiseen

Seuraava esimerkki osoittaa, kuinka kohdistimet voidaan sijoittaa monimutkaisten raporttien tuottamiseen. Sisäinen kohdistin ilmoitetaan jokaiselle toimittajalle.

Katso myös

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *