1

ID のリストを C# からストアド プロシージャに送信することは可能ですか?

UPDATE Germs
SET Mutated = ~Mutated
WHERE (GermID IN (ids))
4

4 に答える 4

2

これは汚いハックかもしれませんが、一時テーブルを作成して、ストアド プロシージャ内からそれに参加することができます (同じ接続中にアクセスされると仮定します)。例えば:

CREATE TABLE #ids (id int)
INSERT INTO #ids VALUES ('123') -- your C# code would generate all of the inserts

-- From within your stored procedure...
UPDATE g
SET Mutated = ~Mutated
FROM Germs g
JOIN #ids i ON g.GermID = i.id
于 2008-10-08T14:32:17.037 に答える
2

あなたは私がやったことを試すことができます:-

Split_String という関数を作成します。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE FUNCTION [dbo].[Split_String] 
(   
    @MyString varchar(5000)
)
RETURNS @Results TABLE
(
    Value varchar(1000)
) 
AS
    BEGIN
        DECLARE @Pos int
        DECLARE @StrLen int
        DECLARE @MyLen int
        DECLARE @MyVal varchar
        SET @pos = 1
        SET @MyLen = 1
        WHILE @MyString <> ''
            BEGIN
                SET @MyLen = charindex(',',@MyString)   
                IF @MyLen = 0 SET @MyLen = Len(@MyString)
                INSERT @Results SELECT replace(substring(@MyString, @pos, @MyLen),',','')
                SET @MyString = SUBSTRING(@MyString,@MyLen+1,len(@MyString))
            END
        RETURN 
    END

次に、IN() を使用するときは、カンマ区切りの文字列を次のように使用します。

SELECT * FROM [youDataBase].[dbo].[Split_String] (<@MyString, varchar(5000),>)
于 2008-10-08T14:39:14.133 に答える
1

この記事によると、テーブル値パラメーターを試すことができます。

于 2008-10-08T14:26:46.000 に答える
0

そうです、XML のチャンクを使用して ID のリストを作成できます。次に、OPENXML を使用して、そのレコード セットから選択できます。

OPENXML、sp_preparexmldocument、sp_removexmldocument を検索します。

于 2008-10-08T14:30:24.370 に答える