sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server-markörtyper - Dynamisk markör | SQL Server Tutorial / TSQL Tutorial

Markörer är de objekt som tillåter oss att komma åt data rad för rad från resultatuppsättningen.

Dynamiska markörer kan uppdateras. Den dynamiska markören kommer att hämta ändringarna (infoga, uppdatera eller ta bort) på varje hämtning medan markören är öppen om någon modifiering hände på originaldata i tabeller. Den här typen av markör är användbar när vi vill extrahera poster från originaltabeller medan markören är öppen och vi fortfarande håller på att modifiera data eller infoga nya poster och vill inkludera dem i markörresultatuppsättningen för att utföra operationen.

Dynamiska markörer är rullningsbara (första, sista, föregående, nästa, relativa) men absoluta alternativet fungerar inte med dynamiska markörer.

Skript för dynamisk markör i SQL Server som används i videon också.


--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
 
Se videon för detaljdemo av dynamiska markörer i SQL Server.
  1. Hur man hittar namnet på en begränsning i Oracle

  2. Använder du LIMIT inom GROUP BY för att få N resultat per grupp?

  3. Paginering i SQL Server med OFFSET/FETCH

  4. IIf()-funktionen kontra IIf()-satsen