0

C# から値の LIST を渡し、ストアド プロシージャでクエリを実行しようとしています。

これは私が持っているものです:

select   distinct FileStream_ID
FROM         dbo.vEmailSent
WHERE     
RequestType_ID in ( + '"' + @RequestTypeID +'"' + )

しかし、括弧がある場合とない場合の構文でエラーが発生します。助けてください。

4

3 に答える 3

4

いくつかの構文エラーが発生する可能性があります。

まず第一に、あなたはあなたの条項andの始めにあります。WHEREへの変更:

WHERE     
RequestType_ID in ( + '"' + @RequestTypeID +'"' + )

次に、括弧+の最初と最後にあります。INこれは無効であり、次のように変更する必要があります。

WHERE
RequestType_ID in ('"' + @RequestTypeID + '"')

最後に、あなたは持っているべきではありません'"'。パラメータ@RequestTypeIDが型の場合は、引用符で囲むのではなく、型intにする必要があります。CAST()varchar

WHERE
RequestType_ID in (CAST(@RequestTypeID as varchar(100))

これはあなたがやろうとしていることではないと思いますが、@RequestTypeID実際にはコンマで区切られた整数です。

その場合、あなたが試みているようにこれを使うことはできません。の場合@RequestTypeID = '1,2,3'、SQLはレコードを返しますRequestType_ID = '1,2,3'。したがって、結果は0になります。

于 2013-01-14T16:41:29.087 に答える
1

AND直後にありWHEREます。しかし、それを修正したとしても、関数が必要です。そうすれば、Splitこれは機能します。

WHERE
    ([RequestType_ID] IN
        (SELECT  Item
         FROM    dbo.Split(@RequestTypeID, ',') AS  Split)) 

これは、テーブル値関数の可能な実装です。

CREATE FUNCTION [dbo].[Split]
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(MAX)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @IDTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END  

テーブル値パラメーターを使用したSQLServer2008の配列とリスト

于 2013-01-14T16:41:08.180 に答える
0

これは機能しません。テーブル値パラメーター (SQL Server 2008 以降を使用している場合)、動的 SQL、XML を使用し、関数などを使用して文字列をテーブルに分割する必要があります。

MVP の Erland Sommarskog は、各アプローチの長所と短所について優れた内訳を示しています。パフォーマンス データは次のとおりです。

http://www.sommarskog.se/arrays-in-sql.html

于 2013-01-14T16:44:53.190 に答える