INSERT TABLE generálása

Gyakran kell valami gyors és akár ronda megoldás olyan egyszerű problémákra, mint minden tárolteljárásra valamilyen jog megadása, vagy hogy SQL INSERT TABLE szkriptet generáljunk minden sorra, ami jelenleg benne van egy megadott táblában. Hogy mikor jó ez? Például amikor fejlesztői környezetből kell átültetni egy tábla teljes tartalmát az élesbe (tesztkörnyezetbe), vagy fordítva. Persze van erre mindenféle adattranszformáló eszköz is, a 10 soros saját szkriptek viszont vagányak és kis problémákra piszok gyorsak. A mai ronda és gyors megoldásunk egy ilyen INSERT TABLE utasításhalmazt generál. SQL szkriptként kell futtatni és SQL szkriptet ad vissza.

Egyetlenegy beállítandó paramétere van: a tábla neve, amiben levő elemekre az INSERT utasításokat generálni akarjuk. Ez a @TableName paraméter a második sorban.

DECLARE @TableName AS nvarchar( max )
SET @TableName = 'aspnet_UsersInRoles'

DECLARE @insert AS nvarchar( max )
SET @insert = 'INSERT INTO ' + QUOTENAME( @TableName ) + '('
SELECT @insert = @insert + QUOTENAME( COLUMN_NAME ) + ','
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableNAme
SET @insert = SUBSTRING( @insert, 1, LEN( @insert )-1 ) + ')'
DECLARE @szkript AS nvarchar( max )
SET @szkript = 'SELECT ''' + @insert + ' VALUES(''+'
SELECT @szkript = @szkript + 'ISNULL( '''''''' + CAST( ' + QUOTENAME( COLUMN_NAME ) + ' AS nvarchar( 100 ) ) COLLATE Latin1_General_CS_AS + '''''''', ''NULL'' ) +'',''+'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableNAme
SET @szkript = SUBSTRING( @szkript, 1, LEN( @szkript )-4 ) + ''')'' AS [InsertCommand] FROM ' + @TableName
EXEC( @szkript )

Fenti szkriptben az aspnet_UsersInRoles tábla van megadva, így annak tartalmát beszúró szkriptet generálunk. Az eredménye egy olyan lista, melyben ilyen sztringek vannak:

INSERT INTO [aspnet_UsersInRoles]([UserId],[RoleId]) VALUES('42F76897-694E-4F99-AB59-A4A0564E3364','5B8A6047-8B96-4355-A442-1315A7199A10')
INSERT INTO [aspnet_UsersInRoles]([UserId],[RoleId]) VALUES('E379B32C-8A43-4A40-9FE3-001EBE2150F7','E230BC91-19B3-451D-878B-2998ACC29C98')
INSERT INTO [aspnet_UsersInRoles]([UserId],[RoleId]) VALUES('D50758A5-95A6-4D05-AC39-001A00A6E09D','E230BC91-19B3-451D-878B-2998ACC29C98')
INSERT INTO [aspnet_UsersInRoles]([UserId],[RoleId]) VALUES('4DB3BC93-7206-44A8-A083-05C1E881B6D2','E230BC91-19B3-451D-878B-2998ACC29C98')
INSERT INTO [aspnet_UsersInRoles]([UserId],[RoleId]) VALUES('E7FC956E-5535-4D15-B4E7-06B9B96A15E3','E230BC91-19B3-451D-878B-2998ACC29C98')
INSERT INTO [aspnet_UsersInRoles]([UserId],[RoleId]) VALUES('5E247133-5785-4FB9-94AB-06E9797DFC35','E230BC91-19B3-451D-878B-2998ACC29C98')

Ezeket már lehet is copy-pastelni a Management Studioba, és tölteni velük a tesztkörnyezet megfelelő tábláját.



Dávid Zoltán

Dávid Zoltán Mérnök Informatikusként végeztem a BME-n, jelenleg webfejlesztéssel és gépi tanulással foglalkozom.

2009.03.16. 15:37:50 | Permalink | Hozzászólások: 0 | Tárgyszavak: , ,


  • Felhasználó utánzatok

    Balássy György (MS RD, ASP.NET MVP, MCTS) ASP.NET-es fejlesztés közben gyakran előfordul, hogy egy olyan funkciót kell megvalósítanunk, amely felhasználói fiókhoz vagy szerepkörhöz kötött, de még nincs kész a projektünkben a regisztráció vagy a bejelentkezés oldal.Ilyenkor az egyik lehetőség a felhasználói adatbázis gyors összekattintgatása, de ha ezt nem tehetjük meg, akkor nincs más megoldás, mint saját Memebership- és Role providerek készítése, amelyek ugyanúgy bejelentkeztetik a felhasználót, de nem igényelnek adatbázist. Ez egyszerűbb, mint azt első hallásra gondolnánk. Tovább »
  • ASP.NET AJAX 4: Kliens oldali adatkötés – Sys.Observer

    Balássy György (MS RD, ASP.NET MVP, MCTS) A cikksorozat előző részeiben ([1], [2]) az egyszeri adatkötéssel ismerkedtünk, ami sok esetben nagyon hasznos, de mégis az az igazi, ami a megváltozott adatot automatikusan képes frissíteni a felhasználói felületen. Ehhez arra van szükségünk, hogy észrevegyük, ha egy objektum valamelyik tulajdonsága megváltozik, ami lássuk be, JavaScriptben nem is olyan egyszerű feladat. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások