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


  • Dátum formátum állítás Windows Mobile-on

    Balássy György (MS RD, ASP.NET MVP, MCTS) Frissítettem a telefonom operációs rendszerét, és bár nem hivatalos és támogatott ROM verzióval, de végre sikerült átállnom Windows Mobile 6.1-re. Az angol operációs rendszeren az egyik első utam a Regional Settings ablakba vezetett, mert megpróbáltam átállítani a dátumok megjelenítését a magyar formátumra. Nem ment könnyen... Tovább »
  • Image Mosaic

    A minap fotóalbum rendezgetés közben eszembe jutott, hogy láttam valahol egy plakátot, amiben egy nagy kép több kis képből volt összerakva mégpedig úgy, hogy ha távolról nézi az ember, akkor a nagy képet látja, közelről nézve pedig teljesen jól kivehetők a kis képek részletei. Na pont ilyet szerettem volna saját fotóimból, hogy kiválasztok egyet, és azt a többiből automatikusan kirakja. Természetesen van ingyenes meg fizetős eszköz is a neten elérhető formában, de kíváncsiságból inkább úgy döntöttem, hogy készítek egyet. Biztos nem a legoptimálisabb a .NET-es képmanipuláló alkalmazás teljesítmény tekintetében, meg biztos vannak még benne hibák is, de egy fél estés fejlesztést... 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