Sal*_*oni 5 sql t-sql sql-server sql-server-2005 sql-server-2008
我想创建一个存储过程,我想在表中插入值.但我不知道在哪个字段中我必须插入值,并且在 运行时我将决定应该在哪个字段中插入值.我想做的是
insert into Tablename(@ColumnName, Description)
values (@ColumnValue, @MH_Description)
Run Code Online (Sandbox Code Playgroud)
我可以在存储过程中传递这种类型的参数,如上例所示??
我也想使用条件
声明@Query nvarchar(4000)声明@Query1 nvarchar(4000)声明@ParmDefinition nvarchar(500);
Run Code Online (Sandbox Code Playgroud)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的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
Run Code Online (Sandbox Code Playgroud)
[编辑]回答你的第二个问题.将其设为一个查询而不是两个
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)'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7419 次 |
| 最近记录: |