sql >> Database teknologi >  >> RDS >> Sqlserver

Kolonnenavn som parameter i INSERT-sætning

Dette er ikke muligt at gøre med parametre. Du bliver nødt til at bygge dynamisk forespørgsel for at opnå dette.

Den proc, der bruger dynamisk SQL, vil se sådan ud:

create procedure MyProc
(
    @ColumnName varchar(100),
    @ColumnValue varchar(100),
    @MH_Description varchar(100)
)
as
begin
    declare @Query nvarchar(4000)
    declare @ParmDefinition nvarchar(500);

    set @Query = '
        insert into Tablename(' + quotename(@ColumnName) +',Description) 
        values (@ColumnValue, @MH_Description)'
    set @ParmDefinition = N'@ColumnValue varchar(100), @MH_Description varchar(100)'
    exec sp_executesql @Query, @ParmDefinition, @ColumnValue = @ColumnValue, @MH_Description = @MH_Description
end

[EDIT] Svar på dit andet spørgsmål. Gør det til én forespørgsel i stedet for to

set @Query = '
    if exists(select * from tbl_temp where '+quotename(@ColumnName)+' = @ColumnValue)
        update tbl_temp set' + quotename(@ColumnName) +' = @ColumnValue, [email protected]
    else        
        insert into tbl_temp(' + quotename(@ColumnName) +',Description)
    values (@ColumnValue, @Description)'



  1. Kolonnedefinitionen er inkompatibel med klynget kolonnedefinition

  2. Send flere <select>-elementer med jQuery POST

  3. Refererer til den samme tabel både som mål for OPDATERING og datakilde i MySql

  4. Tjek streng af tegn er en gyldig dato eller ej