sql >> データベース >  >> RDS >> Sqlserver

INSERT ステートメントのパラメーターとしての列名

    これは、パラメーターでは実行できません。これを実現するには、動的クエリを作成する必要があります。

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


    1. mySQLクエリの結果とif/elseのフォーム配列を解析します

    2. 複数の列でグループ化された行のグループから最大値の行を選択します(PSQL)

    3. SQL Server:PARTITIONBYとGROUPBYの違い

    4. マーケティングデータベースを構築するための5つのステップ