これは、に起因するものです
SELECT SUM(PayAmount)
FROM TeacherPayment_Detail
WHERE TeacherPaymentId IN ('20,21' )
しかし、SQL Serverは期待しています
SELECT SUM(PayAmount)
FROM TeacherPayment_Detail
WHERE TeacherPaymentId IN ('20','21' )
したがって、次のいずれかを実行できます
SQL で '20,21' を '20','21' にトークン化する関数を作成します (テーブルを返す関数を実行するのが最善です)。
SELECT SUM(PayAmount) FROM TeacherPayment_Detail WHERE TeacherPaymentId IN (Function_Split(TeacherPayment.Advance_IDs から値を選択)
'val1','val2' の形式で値を渡します
値が1つだけの場合は「val」となり動作しますが、複数の値の場合は「val1,val2」となります。したがって、これは機能せず、エラーが発生します。この「val1」、「val2」のように渡すと機能します
** 関数 **
CREATE FUNCTION GetTokenizeValue
(
@strCSVString VARCHAR(4000)
)
RETURNS
@Result TABLE
(
-- Add the column definitions for the TABLE variable here
ID int
)
AS
BEGIN
; WITH CTE(Start, [Stop]) AS
(
SELECT 1, CHARINDEX(',' , @strCSVString )
UNION ALL
SELECT [Stop] + 1, CHARINDEX(',' ,@strCSVString , [Stop] + 1)
FROM CTE
WHERE [Stop] > 0
)
INSERT INTO @Result
SELECT SUBSTRING(@strCSVString , Start, CASE WHEN stop > 0 THEN [Stop]-Start ELSE 4000 END) AS stringValue
FROM CTE
RETURN
END
あなたの選択クエリは
SELECT SUM(PayAmount)
FROM TeacherPayment_Detail
WHERE TeacherPaymentId IN (select * from dbo.GetTokenizeValue(TeacherPayment.Advance_IDs))