sql >> データベース >  >> RDS >> Sqlserver

SQL Server(2008)IN()のSPにArrayListまたはStringを渡す

    などのユーザー定義関数を使用できます
    CREATE function [dbo].[csl_to_table] ( @list nvarchar(MAX) )
    RETURNS @list_table TABLE ([id] INT)
    AS
    BEGIN
        DECLARE     @index INT,
                @start_index INT,
                @id INT
    
        SELECT @index = 1 
        SELECT @start_index = 1
        WHILE @index <= DATALENGTH(@list)
        BEGIN
    
            IF SUBSTRING(@list,@index,1) = ','
            BEGIN
    
                SELECT @id = CAST(SUBSTRING(@list, @start_index, @index - @start_index ) AS INT)
                INSERT @list_table ([id]) VALUES (@id)
                SELECT @start_index = @index + 1
            END
            SELECT @index  = @index + 1
        END
        SELECT @id = CAST(SUBSTRING(@list, @start_index, @index - @start_index ) AS INT)
        INSERT @list_table ([id]) VALUES (@id)
        RETURN
    END
    

    これは、IDのnvarcharコンマ区切りリストを受け入れ、それらのIDのテーブルをintとして返します。次に、次のようにストアドプロシージャで返されたテーブルに参加できます-

    DECLARE @passed_in_ids TABLE (id INT)
    
    INSERT INTO @passed_in_ids (id)
      SELECT 
        id 
      FROM
        [dbo].[csl_to_table] (@your_passed_in_csl)
    
    SELECT *
    FROM 
    myTable
    INNER JOIN
    @passed_in_ids ids
    ON
    myTable.id = ids.id
    


    1. 移行のためのPostgreSQL外部キーチェックを無効にする

    2. MySQL結合をSQLServer構文に変換しますか?

    3. debianlennyにpostgres9.0をインストールする

    4. php/Codeigniter--時間を除外して日付のみを比較する方法