Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Типове курсори на SQL Server - динамичен курсор | Урок за SQL Server / Урок за TSQL

Курсорите са обектите, които ни позволяват достъп до данните ред по ред от набора от резултати.

Динамичните курсори са с възможност за актуализиране. Динамичният курсор ще извлече промените (вмъкване, актуализиране или изтриване) при всяко извличане, докато курсорът е отворен, ако се случи някаква модификация на оригиналните данни в таблица/и. Този тип курсор е полезен, когато искаме да извлечем записите от оригинални таблици/и, докато курсорът е отворен и все още сме в процес на модификация на данни или вмъкване на нови записи и искаме да ги включим в набора от резултати на курсора, за да извършим операция.

Динамичните курсори са с възможност за превъртане (първи, последен, предишен, следващ, относителен), но абсолютни опцията не работи с динамични курсори.

Скрипт за динамичен курсор в SQL Server, използван и във видеото.


--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
 
Моля, гледайте видеоклипа за подробна демонстрация на динамични курсори в SQL Server.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте „datetime“ в „datetime2“ в SQL Server (T-SQL примери)

  2. PHP + SQL Server - Как да настроя набор от знаци за връзка?

  3. T-SQL има ли агрегатна функция за конкатенация на низове?

  4. DAY() Примери в SQL Server (T-SQL)

  5. Създайте свързан сървър в SQL Server (пример за T-SQL)