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: , ,


  • HTTPS, csak ha szeretnéd

    Dávid Zoltán Belépéshez kellett, de végül általánosan is felmerült: Hogyan lehet egy pillanatnyilag HTTP-n keresztül nézett oldalról HTTPS-en felküldeni az adatot (postbackelni). Úgy döntöttem, hogy az inkriminált gomb PostbackUrl-jét fogom HTTPS sémájúra átírni. Tovább »
  • Request filteringgel a gonosz ellen

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az MSDN Kompetencia Központ honlapján megszaporodtak az olyan rossz indulatú webes kérések, amit szemmel láthatóan robotok küldenek, próbálva felderíteni a webhely által használt technológiákat, hogy kihasználhassák azok sebezhetőségeit. Itt az ideje, hogy megszabaduljunk tőlük. 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