简体   繁体   English

列名作为INSERT语句中的参数

[英]Column name as a parameter in INSERT statement

I want to create one stored procedure where i want to insert values in a table. 我想创建一个存储过程 ,我想在表中插入值。 But i don't know in which field i have to insert values and at the runtime i will decide in which field the values should be inserted . 但是我不知道我必须在哪个字段中插入值,而在运行时,我将决定应在哪个字段中插入值 What i want to do is 我想做的是

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

Can it possible that i pass this type of parameters in stored procedure as shown in the example above?? 如上例所示,是否可以在存储过程中传递此类参数?

I want to use conditions too as 我也想使用条件

declare @Query nvarchar(4000) declare @Query1 nvarchar(4000) declare @ParmDefinition nvarchar(500); 声明@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 

What am I doing wrong? 我究竟做错了什么?

This is not possible to do with parameters. 这与参数是不可能的。 You will need to build dynamic query to achieve this. 您将需要构建动态查询来实现此目的。

The proc that uses dynamic SQL would look like this: 使用动态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

[EDIT] Answer to your second question. [编辑]回答第二个问题。 Make it one query instead of two 使它成为一个查询,而不是两个

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