1

1 つのパラメーターで複数の値を渡したい。SQL Server 2005

4

4 に答える 4

1

あなたは関数を作ることができます:

ALTER  FUNCTION [dbo].[CSVStringsToTable_fn] ( @array VARCHAR(8000) )
RETURNS @Table TABLE ( value VARCHAR(100) )
AS 
    BEGIN
        DECLARE @separator_position INTEGER,
            @array_value VARCHAR(8000)  

        SET @array = @array + ','

        WHILE PATINDEX('%,%', @array) <> 0 
            BEGIN
                SELECT  @separator_position = PATINDEX('%,%', @array)
                SELECT  @array_value = LEFT(@array, @separator_position - 1)

                INSERT  @Table
                VALUES  ( @array_value )

                SELECT  @array = STUFF(@array, 1, @separator_position, '')
            END
        RETURN
    END

そしてそれから選択します:

DECLARE @LocationList VARCHAR(1000)
SET @LocationList = '1,32'

SELECT  Locations 
FROM    table
WHERE   LocationID IN ( SELECT   CAST(value AS INT)
                           FROM     dbo.CSVStringsToTable_fn(@LocationList) )

また

SELECT  Locations
FROM    table loc
        INNER JOIN dbo.CSVStringsToTable_fn(@LocationList) list
            ON CAST(list.value AS INT) = loc.LocationID

これは、SSRSからPROCに複数値のリストを送信しようとするときに非常に役立ちます。

編集済み:キャストが必要な場合があることを示すために-ただし、CSVリストで送信される内容を制御するように注意してください

于 2012-05-11T20:14:04.253 に答える
1

sproc にxml型指定された入力変数を取り、要素をアンパックして取得することができます。例えば:

DECLARE @XMLData xml

DECLARE 
    @Code varchar(10),
    @Description varchar(10)

SET @XMLData = 
'
    <SomeCollection>
      <SomeItem>
        <Code>ABCD1234</Code>
        <Description>Widget</Description>
      </SomeItem>
    </SomeCollection>
'

SELECT 
    @Code = SomeItems.SomeItem.value('Code[1]', 'varchar(10)'),
    @Description = SomeItems.SomeItem.value('Description[1]', 'varchar(100)')
FROM @XMLDATA.nodes('//SomeItem') SomeItems (SomeItem)

SELECT @Code AS Code, @Description AS Description

結果:

Code        Description
==========  ===========
ABCD1234    Widget
于 2012-05-11T20:59:52.407 に答える
0

提案するだけです。SQL Server 2005 では実際にそうすることができません。少なくとも、簡単な方法はありません。CSV または XML または Base 64 または JSON を使用する必要があります。ただし、これらはすべてエラーが発生しやすく、非常に大きな問題を引き起こすため、そうしないことを強くお勧めします。

SQL Server 2008 に切り替えることができる場合は、テーブル値パラメーター ( Reference1Reference2 ) を使用できます。

できない場合は、ストアド プロシージャで実行する必要性を検討することをお勧めします。つまり、SP を使用して SQL アクションを実行することを本当に望んでいますか (すべきか/しなければなりませんか)。問題を解決する場合は、アドホック クエリを使用してください。教育目的でそうしたい場合は、上記のことを試してみないでください

于 2012-05-08T06:36:28.590 に答える