sql >> Databáze >  >> RDS >> Sqlserver

Typy kurzoru SQL Server - Dynamický kurzor | Kurz SQL Server / Kurz TSQL

Kurzory jsou objekty, které nám umožňují přistupovat k datům řádek po řádku ze sady výsledků.

Dynamické kurzory lze aktualizovat. Dynamický kurzor načte změny (vložení, aktualizaci nebo odstranění) při každém načtení, zatímco je kurzor otevřený, pokud došlo k jakékoli změně původních dat v tabulce/tabulkách. Tento typ kurzoru je užitečný, když chceme extrahovat záznamy z původní tabulky/ů, zatímco je kurzor otevřený a stále jsme v procesu úpravy dat nebo vkládání nových záznamů a chceme je zahrnout do sady výsledků kurzoru k provedení operace.

Dynamické kurzory lze posouvat (první, poslední, předchozí, další, relativní), ale absolutní možnost nefunguje s dynamickými kurzory.

Skript pro dynamický kurzor v SQL Serveru použitý také ve videu.


--drop table dbo.Customer
Create table dbo.Customer ( 
CustomerId Int Identity(1,1),
CustomerName VARCHAR(100),
StreetAddress VARCHAr(100),
City VARCHAR(100),
State CHAR(2))
go

--Insert couple of Records in Sample Table
Insert into dbo.Customer
Select 'Aamir shahzad','Test Street Address','Charlotte','NC'
Union 
Select 'M Raza','Test Street Address','Charlotte','NC'

Select * from dbo.Customer

--Insert NEW Record
Insert into dbo.Customer
Select 'John Smith','Test Street Address','New York City','NY'

--Delete Records
Delete from dbo.Customer
Where CustomerName in ('Aamir Shahzad','M Raza')

--Update All Record
Update dbo.Customer
set CustomerName='NO NAME'




--Cursor Script

Declare @CustomerID INT
Declare @CustomerNAme VARCHAR (100)
DECLARE @StreetAddress VARCHAR(100)
DECLARE @City VARCHAR(100)
DECLARE @State CHAR(2)

--DECLARE A CURSOR
DECLARE CUR CURSOR
DYNAMIC
FOR
Select CustomerID,CustomerName,StreetAddress,City,State from dbo.Customer

--OPEN CURSOR
OPEN CUR
Print 'CURSOR IS OPEN'
--FETCH NEXT RECORD
FETCH NEXT FROM CUR INTO @CustomerID,@CustomerNAme,@StreetAddress,@City,@State
WHILE @@FETCH_STATUS=0
BEGIN 
RAISERROR ('',0,1) WITH NOWAIT
WAITFOR DELAY '00:00:15'
PRINT CONCAT(@CustomerID,' ',@CustomerNAme,' ',@StreetAddress,' ',@City,' ',@State)
FETCH NEXT FROM CUR INTO @CustomerID,@CustomerNAme,@StreetAddress,@City,@State

END
CLOSE CUR
DEALLOCATE CUR
 
Podívejte se na video s podrobnou ukázkou dynamických kurzorů na serveru SQL Server.
  1. Jak nastavíte propojený server s databází Oracle na SQL 2000/2005?

  2. Nemáte rádi databázové spouštěče? Jen nevíte, jak s nimi pracovat!

  3. Injekce SQL, která obchází mysql_real_escape_string()

  4. Zkontrolujte x po sobě jdoucích dnů - daná časová razítka v databázi