Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Име на колона като параметър в оператор INSERT

Това не е възможно да се направи с параметри. Ще трябва да създадете динамична заявка, за да постигнете това.

Процедурата, която използва динамичен SQL, ще изглежда така:

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

[РЕДАКТИРАНЕ] Отговор на втория ви въпрос. Направете една заявка вместо две

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика от две дати и час в sql сървъра

  2. T-SQL получава брой работни дни между 2 дати

  3. Съкратете всички таблици в база данни в SQL Server - SQL Server / TSQL урок, част 55

  4. Как да зададете езика по подразбиране за всички нови влизания в SQL Server (T-SQL)

  5. Създайте двоичен низ от нули с променлива дължина