Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Nama kolom sebagai parameter dalam pernyataan INSERT

Ini tidak mungkin dilakukan dengan parameter. Anda perlu membuat kueri dinamis untuk mencapai ini.

Proc yang menggunakan SQL dinamis akan terlihat seperti ini:

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] Jawaban untuk pertanyaan kedua Anda. Jadikan satu kueri, bukan dua

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. Beberapa pernyataan pilih dalam prosedur tersimpan untuk mendapatkan hasil yang diinginkan

  2. Bagaimana menemukan kueri berkinerja terburuk di SQL Server 2008?

  3. Bagaimana cara melakukan penyisipan dan pengembalian identitas yang disisipkan dengan Dapper?

  4. SQL Dinamis vs Prosedur Tersimpan

  5. Bagaimana cara menangani tipe data TIME dari SQL Server 2008 dengan NHibernate?