sql >> Databasteknik >  >> RDS >> Sqlserver

Bygg en dynamisk lista med INSERT-satsvärden

Tänk på följande kommando:

SELECT 'SELECT ' +
    STUFF ((
        SELECT ', [' + name + ']'
        FROM syscolumns
        WHERE id = OBJECT_ID('Table') AND
            name <> 'me'
        FOR XML PATH('')), 1, 1, '') +
    ' FROM [Table]'

Det kommer att bygga en SELECT uttalande för en specifik tabell. För att bygga en INSERT påstående kan det se ut så här:

SELECT @sql = 'INSERT INTO [Table] (' +
    STUFF ((
        SELECT ', [' + name + ']'
        FROM syscolumns
        WHERE id = OBJECT_ID('Table') AND
            name <> 'me'
        FOR XML PATH('')), 1, 1, '') +
    ') VALUES (' +
    STUFF ((
        SELECT ', @' + name
        FROM syscolumns
        WHERE id = OBJECT_ID('Table') AND
            name <> 'me'
        FOR XML PATH('')), 1, 1, '') + ')'

Det finns naturligtvis många sätt att komma till INSERT uttalande, forma det efter din smak.



  1. Threading och SqlFileStream. Processen kan inte komma åt den angivna filen eftersom den har öppnats i en annan transaktion

  2. få framgång/misslyckande svar från mysqli_query

  3. Högst per grupp

  4. MySQL JOIN / GROUP_CONCAT andra bordet?