これは、パラメーターでは実行できません。これを実現するには、動的クエリを作成する必要があります。
動的 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
プレ>[編集] 2 番目の質問に答えます。 2 つではなく 1 つのクエリにする
set @Query = ' if exists(select * from tbl_temp where '+quotename(@ColumnName)+' = @ColumnValue) update tbl_temp set' + quotename(@ColumnName) +' = @ColumnValue, [email protected] else insert into tbl_temp(' + quotename(@ColumnName) +',Description) values (@ColumnValue, @Description)'
プレ>