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


  • ASP.NET AJAX 4: Kliens oldali adatkötés - alapok

    Balássy György (MS RD, ASP.NET MVP, MCTS) Több, mint 2 éve, hogy először írtam lelkendezve a kliens oldali deklaratív adatkötésről. Akkor mindez az ASP.NET Futures részeként, mintegy előzetesként volt elérhető, és ahogy a 2007-es Web Konferencián be is mutattam, az XML-Script volt a fő csapásirány. Aztán tavaly nyáron jött a hír, hogy az XML-Script megy a kukába, és az ASP.NET AJAX-ban egy teljesen új megvalósítással fogunk találkozni. Tovább »
  • A debugger automatikus kiértékelésének szabályozása

    Dávid Zoltán Már korábban is volt szerencsénk belefutni olyan szituációba, amikor a Visual Studio debuggere meglepetéseket okozott. Szinte minden debuggerrel kapcsolatos anomáliát ugyanaz a jelenség idézi elő. 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