1

SQL Server 2012 と T-SQL をクエリ言語として使用しています。

パラメータ (@userGroupID) として渡された 1 つの ID 値と多数の関数 ID を使用して、[cross_function_user] の複数の列を更新/挿入するのに助けが必要です。これらは C# のリストであり、テーブル値パラメーターとして sproc に渡されます - Item という名前の int の列が 1 つだけあります。

ALTER PROCEDURE [whatever]
    @userGroupID INT,
    @listID AS IntList READONLY
AS
BEGIN   
        SET NOCOUNT ON;
    MERGE INTO [dbo].[cross_function_user] USING @listID
    ON [dbo].[cross_function_user].id_group_user = @userGroupID
    WHEN MATCHED THEN
        UPDATE SET [cross_function_user].id_group_user = @userGroupID,
                   [cross_function_user].id_function = (SELECT Item FROM @listID)
    WHEN NOT MATCHED THEN
        INSERT (id_group_user, id_function) 
        VALUES (@userGroupID, (SELECT Item FROM @listID) );

END

まず、もちろん「サブクエリが複数の結果を返しました」というエラーが発生しますが、これを書き直すスキルがなく、アップサートが正しい方法で記述されているかどうかはよくわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

2

これを試して:

YourColumn を TVP の列の名前に置き換える必要があります。

ALTER PROCEDURE [whatever]
@userGroupID INT,
@listID AS IntList READONLY
AS
BEGIN   
    SET NOCOUNT ON;
    MERGE INTO [dbo].[cross_function_user] USING @listID
    ON [dbo].[cross_function_user].id_group_user = @userGroupID
    WHEN MATCHED THEN
        UPDATE SET [cross_function_user].id_function = S.YourColumn
    WHEN NOT MATCHED THEN
        INSERT (id_group_user, id_function) 
        VALUES (@userGroupID, S.YourColumn);

END
于 2013-02-01T06:23:32.640 に答える