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