2015-09-07 40 views
-1

我需要更新一些行那裏BF_ID是一個nvarchar @ArrBF =「1,3,5,7」SQL更新與其中一個nvarchar的

update BILL_FOLDERS_DATA 
SET 
    BFD_Quantity = @CFD_Quantity 
WHERE BFD_Path = @CFD_Path AND BF_ID IN (@ArrBF) 

我得到一個錯誤,因爲我需要將數組轉換爲整數。我怎麼能實現它?

+0

http://www.codeproject.com/Tips/584680/Using-逗號分隔值參數字符串在S –

+1

明確的重複問題。這裏@ArrBF只是一個字符串,它看起來像一組整數並不重要,它仍然是一個字符串。必須將該字符串拆分成行,並在你的情況下,把它看作整數。 –

回答

1

最簡單的方法是將數組轉換爲表值函數,以及使用結果在加入EG -

create FUNCTION [dbo].[F_SplitString] 
(@String NVARCHAR(max),@Delimiter VARCHAR(5)) 

RETURNS @SplittedValues TABLE 

(OccurenceId SMALLINT IDENTITY(1,1), SplitValue VARCHAR(MAX)) 

    AS 
    begin 
    INSERT INTO @SplittedValues 
    SELECT Split.a.value('.', 'VARCHAR(100)') AS Data 
FROM 
(SELECT CAST ('<M>' + REPLACE(@String , @Delimiter, '</M><M>') + '</M>' AS XML) AS Data) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a) 

RETURN 
END 
+0

真的沒有必要再像以前那樣使用連接來完成這些事情 - 至少在MS SQL上。只需使用'in(select ...)'。我知道,舊習慣很難消退,但這是值得的。 – Luaan

+0

連接遠比where子句中的子選擇更有效率 - 如果該集合中有多條記錄,那麼它將不得不重新評估每個單行的子選擇... – SeanR

+0

以前是真的;現在很少。查看查詢的執行計劃 - 通常會完全相同。 – Luaan