簡體   English   中英

列名作為INSERT語句中的參數

[英]Column name as a parameter in INSERT statement

我想創建一個存儲過程 ,我想在表中插入值。 但是我不知道我必須在哪個字段中插入值,而在運行時,我將決定應在哪個字段中插入值 我想做的是

insert into Tablename(@ColumnName, Description) 
values (@ColumnValue, @MH_Description)

如上例所示,是否可以在存儲過程中傳遞此類參數?

我也想使用條件

聲明@Query nvarchar(4000)聲明@ Query1 nvarchar(4000)聲明@ParmDefinition nvarchar(500);

 set @Query = ' insert into tbl_temp(' + quotename(@ColumnName) +',Description) values (@ColumnValue, @Description)' set @Query1 = ' update tbl_temp set' + quotename(@ColumnName) +'=@ColumnValue, Description=@Description' set @ParmDefinition = N'@ColumnValue varchar(100),@Description varchar(100)' if exists(select 'true' from tbl_temp where quotename(@ColumnName)=@ColumnValue) begin exec sp_executesql @Query1, @ParmDefinition, @ColumnValue = @ColumnValue, @Description = @Description end else begin exec sp_executesql @Query, @ParmDefinition, @ColumnValue= @ColumnValue, @Description = @Description end 

我究竟做錯了什么?

這與參數是不可能的。 您將需要構建動態查詢來實現此目的。

使用動態SQL的proc如下所示:

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, Description=@Description
    else        
        insert into tbl_temp(' + quotename(@ColumnName) +',Description)
    values (@ColumnValue, @Description)'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM