【问题标题】:Column name as a parameter in INSERT statement列名作为 INSERT 语句中的参数
【发布时间】:2011-06-23 04:41:39
【问题描述】:

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

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 sql-server sql-server-2005 tsql sql-server-2008


    【解决方案1】:

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

    使用动态 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)'
    

    【讨论】:

    • 可以在MVC动作控制器中进行动态查询。如果是,那么请你告诉我怎么做?
    • @Saloni - 在哪里使用 MVC、ASP.NET、WinForms 或 WPF 并不重要。只需通过您使用的任何数据访问权限调用 proc。
    • 我也想像这样使用条件
    • @Saloni - 您可以轻松添加条件。只需按照示例进行即可。
    • @Alex Aza- 我不明白这个你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2013-03-05
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多