[Home] Utilizare CURSOR: mutarea unor randuri (inregistrari) pe coloane


--tabela Article
CREATE TABLE Article
(
[ID] INT PRIMARY KEY IDENTITY (1, 1),
[Name] NVARCHAR (100),
[Description] NVARCHAR (200))

----------------------------------------------
--  Exemplu: transformarea randurilor in coloane
--  utilizand cursoare si tabele temporare
----------------------------------------------

--declarare variabile interne

DECLARE @Name NVARCHAR(100)
DECLARE @Description NVARCHAR(200)

DECLARE @sql AS VARCHAR(8000)

--creare tabel temporar
CREATE TABLE #temp ([ID] INT PRIMARY KEY IDENTITY)

--declarare cursor
DECLARE curs CURSOR FOR
SELECT [Name], [Description]
FROM Article
ORDER BY [Name]

--deschidere cursor
OPEN curs

--preluarea primei inregistrari
FETCH NEXT FROM curs
INTO @Name, @Description

--navigarea prin setul de inregistrari
WHILE @@FETCH_STATUS = 0
BEGIN
     SET @sql = 'ALTER TABLE #temp ADD [' + @Name + '] NVARCHAR(100)'
     EXECUTE (@sql)

     SET @sql = 'INSERT INTO #temp (' + @Name + ') VALUES (''' + @Description + ''')'
     EXECUTE (@sql)

     FETCH NEXT FROM curs
     INTO @Name, @Description
END

--inchidere cursor
CLOSE curs
DEALLOCATE curs

SELECT * FROM #temp
--stergere tabel temporar
DROP TABLE #temp