列名作为 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??
我也想使用条件
声明@Query nvarchar(4000)声明@Query1 nvarchar(4000)声明@ParmDefinition nvarchar(500);
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
我做错了什么?
推荐答案
这对参数是不可能的.您将需要构建动态查询来实现这一点.
This is not possible to do with parameters. You will need to build dynamic query to achieve this.
使用动态 SQL 的过程如下所示:
The proc that uses dynamic SQL would look like this:
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
回答您的第二个问题.用一个查询代替两个查询
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)'
这篇关于列名作为 INSERT 语句中的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!