Sql 列名称作为INSERT语句中的参数

Sql 列名称作为INSERT语句中的参数,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,我想创建一个存储过程,在其中我想在表中插入值。 但我不知道我必须在哪个字段中插入值,并且在 运行时我将决定在哪个字段中插入值。 我想做的是 insert into Tablename(@ColumnName, Description) values (@ColumnValue, @MH_Description) 我是否可以在存储过程中传递这种类型的参数,如上面的示例所示 我也希望使用条件作为条件 声明@Query nvarchar(4000) 声明@Query1 nvarchar(4000)

我想创建一个存储过程,在其中我想在表中插入值。 但我不知道我必须在哪个字段中插入值,并且在 运行时我将决定在哪个字段中插入值。 我想做的是

insert into Tablename(@ColumnName, Description) 
values (@ColumnValue, @MH_Description)
我是否可以在存储过程中传递这种类型的参数,如上面的示例所示

我也希望使用条件作为条件

声明@Query nvarchar(4000) 声明@Query1 nvarchar(4000) 声明@ParmDefinition nvarchar(500)


我做错了什么?

这与参数无关。您需要构建动态查询来实现这一点

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

可以在MVC action controller中进行Can动态查询。如果是,那么请告诉我如何使用?@Saloni-无论您在何处使用它,MVC、ASP.NET、WinForms或WPF都无关紧要。只要通过您正在使用的任何数据访问调用procthis@Saloni-您可以轻松添加条件。只需按照样本操作。@Alex Aza-我不明白这一点,你能解释一下吗?
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)'