1

select ステートメントで 2 つの関数呼び出しの結果を返すことは可能ですか?

一時テーブルに順番に挿入する2つのcsv文字列を受け入れる以下のTSQLを切り取りました。dbo.Split文字列を受け取り、値のテーブルを返します。

スニペット

DECLARE @MeasureCategoryIDs as nvarchar(100)
DECLARE @SnapshotIDs as nvarchar(100)

    SET @MeasureCategoryIDs = '1,2,3'
    SET @SnapshotIDs = '9,8,7'

    CREATE TABLE #tmpMeasureCats
    (
        MeasureCatID int PRIMARY KEY NOT NULL,
        SnapshotID int NOT NULL
    )

    INSERT INTO #tmpMeasureCats
        SELECT value FROM dbo.Split(',',@MeasureCategoryIDs), value FROM dbo.Split(',',@SnapshotIDs)

    DROP TABLE #tmpMeasureCats

スプリット

ALTER FUNCTION [dbo].[Split] 
   (  @Delimiter varchar(5), 
      @List      varchar(8000)
   ) 
   RETURNS @TableOfValues table 
      (  RowID   smallint IDENTITY(1,1), 
         [Value] varchar(50) 
      ) 
AS 
   BEGIN

      DECLARE @LenString int 

      WHILE len( @List ) > 0 
         BEGIN 

            SELECT @LenString = 
               (CASE charindex( @Delimiter, @List ) 
                   WHEN 0 THEN len( @List ) 
                   ELSE ( charindex( @Delimiter, @List ) -1 )
                END
               ) 

            INSERT INTO @TableOfValues 
               SELECT substring( @List, 1, @LenString )

            SELECT @List = 
               (CASE ( len( @List ) - @LenString ) 
                   WHEN 0 THEN '' 
                   ELSE right( @List, len( @List ) - @LenString - 1 ) 
                END
               ) 
         END

      RETURN 

   END 

両方の csv 文字列で分割関数を呼び出した結果

ここに画像の説明を入力

上記のスニペットを実行すると、以下のエラーが発生します

メッセージ 156、レベル 15、状態 1、行 15
キーワード「FROM」付近の構文が正しくありません。

私が探しているのは以下のとおりです

Col1     Col2
1        9
2        8
3        7

Insert の 2 つの値を返すために Select ステートメントを指定する別の方法はありますか?

4

3 に答える 3

0

関数が期待どおりに機能していると仮定する

INTO #tmpMeasureCats
SELECT 
    A.value as 'MeasureCat', 
    B.value as 'Snapshot'
FROM 
    dbo.Split(',',@MeasureCategoryIDs) A, 
    dbo.Split(',',@SnapshotIDs) B
于 2013-09-12T10:48:01.163 に答える