1

私は何年も SQL を書いていませんでしたが、今はもう少し「パフォーマンスに飢えた」サイトに取り組んでいます。誰かがこれを削除 SQL コマンドに変換するのを手伝ってくれませんか?

私はこれらをたくさん持っているので、これを手伝ってくれるととても助かります。ありがとう!

私はこれまでに得ました:

Delete FROM [DbName].[dbo].[RatingListTriangleModels] 
WHERE  ...

Linq 選択コマンド:

var allRatingListObjects = from row in ctx.RatingListTriangle
                           where
                              (row.To1Id == myToid && row.To2Id == theirTradeObjectid)
                               || (row.To2Id == myToid && row.To3Id == theirTradeObjectid)
                               || (row.To3Id == myToid && row.To1Id == theirTradeObjectid)
                           select row;

更新:これが私が行った実用的なソリューションです:

using (SqlCommand command = new SqlCommand
                ("delete TBL from RatingListTriangleModels TBL where ( TBL.To1Id = @MY_ID and TBL.To2Id = @OTHER_ID ) or ( TBL.To2Id = @My_ID and TBL.To3Id = @OTHER_ID ) or ( TBL.To3Id = @My_ID and TBL.To1Id = @OTHER_ID )", cn))
            {
                // Add new SqlParameter to the command.
                command.Parameters.Add(new SqlParameter("MY_ID", myToid));
                command.Parameters.Add(new SqlParameter("OTHER_ID", theirTradeObjectid));
                var no = command.ExecuteNonQuery();
            }
4

2 に答える 2

2

これにより、linq-statement で指定したレコードが削除されますが、@YOUR_IDand@OTHER_IDを対応する ID に置き換える必要があります。

でこれを行うことができますSqlParameter

delete from [DbName].[dbo].[RatingListTriangleModels] TBL
where ( TBL.To1Id = @YOUR_ID and TBL.To2Id = @OTHER_ID )
   or ( TBL.To2Id = @YOUR_ID and TBL.To3Id = @OTHER_ID )
   or ( TBL.To3Id = @YOUR_ID and TBL.To1Id = @OTHER_ID )  
于 2013-01-02T18:16:38.487 に答える
1

そのlinqがTSQLで選択した行を削除したい場合は、次のことができます

DECLARE @p0 int;
DECLARE @p1 int;
SET @p0 = <some integer>;
SET @p1 = <some other integer>;


DELETE
            [DbName].[dbo].[RatingListTriangleModels]
    WHERE
            ([To1Id] = @p0 AND [To2Id] = @p1)
        OR  
            ([To2Id] = @p0 AND [To3Id] = @p1)
        OR
            ([To3Id] = @p0 AND [To1Id] = @p1);

もちろん、おそらくステートメントをコンテキストに渡し、ID をパラメーターとして渡したいと思うでしょう。そうすればExecuteCommand、.Net がこれを の呼び出しにラップsp_executeSqlします。これにより、インジェクション攻撃から保護され、クエリ プランの再利用の利点と直接の TSQL 操作の柔軟性が得られます。

このような単純な操作は、おそらく、この追加の複雑さなしに linq で同等に実行されるでしょう。

于 2013-01-02T18:18:23.813 に答える