sql - 列名作为 INSERT 语句中的参数

标签 sql sql-server sql-server-2005 tsql sql-server-2008

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

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

我是否可以在存储过程中传递这种类型的参数,如上面的示例所示?

我也想使用条件作为

declare @Query nvarchar(4000) declare @Query1 nvarchar(4000) declare @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 的过程如下所示:

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)'

关于sql - 列名作为 INSERT 语句中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6449409/

相关文章:

SQL Server 输出参数

c# - SQL INSERT 奇怪地跳过第一条记录

sql-server - SQL Server 依赖标识 - 有这样的事情吗?

mysql - MS SQL 到 MYSQL 的 RANK 转换

sql-server - 如何删除 SQL Server 2008 中的区分大小写检查?

Hibernate自动递增id sql server 2005

sql - 如何在 Informix 4gl 中引用 TEXT 类型?

sql - 我们如何跟踪 SQL Server 中的存储过程更改,就像 TFS 中的版本控制一样

php - 是否应该在数据库级别处理唯一字段的验证?

SQL HASHBYTES 函数在 CASE WHEN/IIF 中使用时返回奇怪的输出