PÄIVITYSLAUSEKKEIDEN TULOSTUSLAUSEKE
TULOSTUSLAUSEKE otettiin käyttöön SQL Server 2005-versiossa. TULOSTUSLAUSEKE palauttaa jokaisen rivin arvot, joihin lisäys -, päivitys-tai POISTOLAUSEKKEET vaikuttivat. Se tukee jopa SQL Server 2008: ssa esitettyä MERGE statementia. TULOSTUSLAUSEKKEEN tulos voidaan lisätä erilliseen taulukkoon kyselyn suorittamisen aikana. Tätä lauseketta käytetään yleisimmin tilintarkastukseen. Käyttämällä tätä joku voi toteuttaa mukautetun prosessin, joka toimisi kuten CDC, tai toimia samalla tavalla kuin CDC.
lisäksi TULOSTUSLAUSEKKEEN tulokset voidaan palauttaa käsittelysovelluksiin käytettäväksi esimerkiksi vahvistusviesteissä, kirjauksissa ja muissa sovellusvaatimuksissa. Tässä artikkelissa, annan joukon esimerkkejä esitellä käyttöä TULOSTUSLAUSEKKEEN syömällä tulokset päivitettyjen rivien taulukkomuuttuja päivityksen lausuntoja.
aloittaminen
seurataksesi alla olevia esimerkkejä sinun on luotava taulukkoosasto_src suorittamalla alla oleva T-SQL-koodi SQL Server-tietokannassa. Viitattu osio sisältää Output_Update.sql-tiedosto, joka sisältää T-SQL-koodin alla olevien esimerkkien kokeilemiseksi.
IF OBJECT_ID ('Department_SRC', 'U') IS NOT NULL DROP TABLE dbo.Department_SRC;CREATE TABLE .( IDENTITY(1,1) NOT NULL, varchar(50) NOT NULL, varchar(50) NOT NULL, NOT NULL) ON Insert into .(,,) Values('Engineering','Research and Development',getdate());
näet taulukon tiedoista, että tietue on lisätty taulukkoon alla olevan kuvan osoittamalla tavalla.
toteuta TULOSTUSLAUSEKE Päivityslausekkeissa
kuten edellisessä artikkelissani keskustelimme, TULOSTUSLAUSEKE antaa pääsyn kahteen virtuaalitaulukkoon (Taikataulukkoon):
- ”Lisätty” sisältää uuden rivit (Lisää tai Päivitä ’ s set)
- ”deleted” sisältää rivien vanhan kopion(Update ’ S set)
Tulostuslausekkeella on pääsy sekä lisättyihin että poistettuihin sisäisiin taulukoihin. Tämä tarkoittaa, että molemmat taulukot ovat käytettävissä samaan aikaan, kun PÄIVITYSLAUSEKE suoritetaan. Oletetaan esimerkiksi, että päivitämme muutamia sarakkeita taulukossa yhdelle riville. Uudet päivitetyt arvot ovat taulukkoon tehtyjä muutoksia, ja ne ovat sisäisessä taulukossa. Lisäksi muutetut tiedot ovat vanhoja tietoarvoja, jotka lisätään poistettuun sisäiseen taulukkoon.
Päivitysarvojen katselu
TULOSTUSLAUSEKKEEN avulla voimme näyttää päivitetyt arvot tulostusikkunassa valitsemalla sarakkeiden nimet, joissa on lisätty etuliite tai käyttämällä lisättyä.* näyttää kaikki sarakkeet asetetusta taulukosta. Lisäksi voimme näyttää vanhat tiedot taulukosta lähtöikkunaan valitsemalla sarakkeen nimet poistetulla etuliitteellä tai käyttämällä poistettuja.* näyttää kaikki sarakkeet taulukosta. Tämä auttaa myös tulostamaan joitakin tuotos viestejä management studio ikkuna.
selittääkseni tämän esimerkillä suoritan alla olevaa koodia, jossa yritämme päivittää ryhmänimi-saraketta ”tutkimus-ja kehitystyön” arvosta ”It” – arvoon ”tekniikan” osastolle.
--Update the GroupName for the Department.Update Set ='IT', ModifiedDate=Getdate()OUTPUT deleted.Name ,deleted.GroupName as GroupName_old, deleted.ModifiedDate as ModifiedDate_old, inserted.GroupName as GroupName_new, inserted.ModifiedDate as ModifiedDate_newWhere ='Engineering'
kun suoritamme yllä olevan koodin, voimme nähdä TULOSTUSLAUSEEN tuloksen kuten alla olevassa kuvassa.
asetin TULOSTULOKSET Taulukkomuuttujaan
esittääkseni tämän esimerkin ilmoitin @Updated-nimisen taulukkomuuttujan tallentamaan TULOSTUSLAUSEKKEEN tulokset tähän taulukkomuuttujaan. Käytämme tuotosta syntaksiin tallentaaksemme tulokset taulukkomuuttujaksi. Tässä lähestymistavassa, meillä on pääsy asettaa rivejä sekä uusia arvoja ja vanhoja arvoja, jotka on päivitetty kyselyn, joita voidaan käyttää seuraavissa vaiheissa samassa erässä.
--capturing Updated values using table variable.DECLARE @Updated table( int, varchar(50), varchar(50), varchar(50), datetime, datetime);Update Set ='IT', ModifiedDate=Getdate()OUTPUT deleted.DepartmentID, deleted.Name, deleted.GroupName as GroupName_old, inserted.GroupName as GroupName_new, deleted.ModifiedDate as ModifiedDate_old,inserted.ModifiedDate as ModifiedDate_newINTO @UpdatedWhere ='Engineering'--Querying from @Updated output tableSelect * from @Updated
kun suoritamme yllä olevan koodin, voimme nähdä, että tulokset on lisätty @Updated-taulukkomuuttujaan alla olevan kuvan mukaisesti.
TULOSTUSLAUSEKKEEN käyttö tyypin 3 hitaasti muuttuvan Dimension lataamiseen
edellä esitetyillä esimerkeillä ULOSTULOLAUSE on erittäin hyvä vaihtoehto tyypin 3 dimension taulukon lataamiseen. Jotta selittää tämän esimerkin, olen suorittaa alla koodi, joka luo taulukon tyypin 3 ulottuvuuden nimeltään Department_Type3.
---Type 3 table exampleIF OBJECT_ID ('Department_Type3', 'U') IS NOT NULL DROP TABLE dbo.Department_Type3;CREATE TABLE .( IDENTITY(1,1) NOT NULL, varchar(50) NULL, varchar(50) NULL, varchar(50) NULL, NULL) ON GO---Insert some test valuesInsert into .(,,) Values('Engineering','Research and Development',getdate());Select * from .
kun suoritamme yllä olevan koodin, voimme nähdä taulukon tietojen tuloksen alla olevassa kuvassa.
kun lisäämme uutta tietuetta Department_Type3-taulukkoon, voimme nähdä, että GroupName_old-sarakkeella on nolla-arvo ja GroupName_Current-sarakkeella on tuoreen lisäyksen arvo. Oletetaan, että oli muutos GroupName_current varten ”Engineering” Osaston nimi ja meidän täytyy päivittää Department_Type3 taulukko uuden GroupName_current arvo. Koska tämä on, TYPE3 dimension taulukko vaatimus tässä on päivittää GroupName_old sarake ”tutkimus ja kehitys” ja GroupName_Current kanssa uuden arvon.
--capturing Updated values using table variable.DECLARE @Updated table( int, varchar(50), varchar(50), varchar(50), datetime, datetime);Update Set ='IT', EffectiveDate=Getdate()OUTPUT deleted.DepartmentID, deleted.Name, deleted. as ,inserted.GroupName_current as GroupName_new, deleted.EffectiveDate as ModifiedDate_old,inserted.EffectiveDate as ModifiedDate_newINTO @UpdatedWhere ='Engineering'--Update the GroupName_old with old valuesUpdate aSet a.GroupName_old=b.GroupName_old, a.EffectiveDate=b.ModifiedDate_newfrom as ainner join @Updated as bon a.DepartmentID=b.DepartmentID--Querying the final tableSelect * from
kun olemme suorittaneet yllä olevan koodin, otamme poistetun sisäisen taulukon tulokset @Updated table-muuttujaan ja käytämme näitä tietoja lopputaulukon sarakkeiden päivittämiseen tämän tyypin 3 hitaasti muuttuvan muuttujan toteuttamiseksi. Voimme nähdä tulos finaalitaulukon tiedot ennen ja jälkeen suorittamisen edellä selvitys kuten alla kuvat.
ennen PÄIVITYSLAUSEKKEEN toteuttamista
PÄIVITYSLAUSEKKEEN suorittamisen jälkeen
TULOSTUSLAUSEKKEEN rajoitukset
osa skenaarioista, joissa TULOSTUSLAUSEKETTA ei tueta:
- DML-lausekkeet, jotka viittaavat paikallisiin osioituihin näkymiin, jaettuihin osioituihin näkymiin tai etätauluihin.
- lisää lausekkeet, jotka sisältävät SUORITUSLAUSEEN.
- Kokotekstiset predikaatit eivät ole sallittuja TULOSTUSLAUSEKKEESSA, kun tietokannan yhteensopivuustaso on asetettu arvoon 100.
- lausekkeen tulostetta ei voi käyttää näkymän eli rowset-funktion lisäämiseen.
- käyttäjän määrittelemää funktiota ei voi luoda, jos se sisältää lausekkeeseen tulosteen, jonka kohteena on taulukko
koko lista on lueteltu tästä linkistä: https://technet.microsoft.com/en-us/library/ms177564(v=sql.110).aspx
Yhteenveto
kuten yllä olevista esimerkeistä käy ilmi, TULOSTUSLAUSEKE on helppokäyttöinen ja voi välttää paljon mukautettuja koodauksia, jotta voidaan tallentaa päivitettyjen arvojen tulokset sekä vanhoilla että uusilla arvoilla taulukkomuuttujaan kyselyn suorittamisen aikana.
Leave a Reply