- 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ä lausekeWHERE 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 onREAD_ONLY
. -
STATIC
jaFAST_FORWARD
kohdistimet ovat oletusarvoisestiREAD_ONLY
. -
DYNAMIC
jaKEYSET
kohdistimet ovat oletusarvoisestiOPTIMISTIC
.
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.