這是由於
SELECT SUM(PayAmount)
FROM TeacherPayment_Detail
WHERE TeacherPaymentId IN ('20,21')
但SQL Server希望
SELECT SUM(PayAmount)
FROM TeacherPayment_Detail
WHERE TeacherPaymentId IN ('20','21')
所以你可以做以下
任何一個寫一些功能,這將tokenise了「 20,21'到'20','21'在 SQL(最好做一個函數,它會返回一個表)
SELECT SUM(PayAmount) FROM TeacherPayment_Detail WHERE TeacherPaymentId IN(來自Function_Split選擇VAL(TeacherPayment.Advance_IDs)的形式 'VAL1'
通值, 'val2的'
當它只有一個值時,它將是'val'並起作用,但是當它不止一個值時,它將'val1,val2'。所以這不會導致錯誤。如果你通過這樣的 'VAL1', '值2'
** **功能
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))
謝謝你幫助我。我理解這個問題。但我不知道如何在sql中創建一個函數。你能寄給我這個功能嗎? –
我通過添加函數修改了答案。請試試這個 – kbvishnu
謝謝你幫助我。我成功地得到了我的結果。我已經在你的帖子之前使用過Ritesh D鏈接,但你的功能對男士也有幫助。 –