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


  • Windows Live Messenger error 81000451

    Balássy György (MS RD, ASP.NET MVP, MCTS) A kíváncsiság néha erősebb a józan észnél, ezért időnként hajlamos vagyok az éles gépemre béta szoftvereket telepíteni. Bár nem vagyok chatfüggő, feltettem az új Live Writer mellé a Live Messengert is, aminek meg is lett az eredménye, be sem tudok jelentkezni. Tovább »
  • Word dokumentum generálása adatkötéssel - 6. rész: Végjáték

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az előző részekben megszerzett tudásunkat felhasználhatjuk arra, hogy kibővítsük a SharePoint lista elemekkel kapcsolatos szolgáltatásait. A WSS listák beépített funkciói közé tartozik, hogy kiválóan integrálódnak Excellel, Outlookkal és Access-szel, de a Word kimaradt a sorból. Pedig milyen szép is lenne, ha egy névjegyalbum valamelyik eleméből egy kattintással megcímzett levelet generálhatnánk! Nem is olyan nehéz... 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