我碰到類似的問題,在這裏我需要在我的選擇查詢IN,並在運行時改變元素的數量。
我使用參數化查詢在存儲過程的形式,並通過包含的東西我要找的列表分隔字符串。逃生由系統自動處理,不需要採取非凡的步驟。最好不要使用您正在搜索的文本中的字符(如逗號)分隔它們。豎條(「|」)在許多情況下可能效果最好。
順便說一句,請確保您的表中的CRLFs是CHAR(13)+ CHAR(10),因爲相反的方法不是\ r \ n,並且如果Environment.NewLine是part的搜索。
下面是使用一個快速和骯髒的解析解析到一個表,我已經使用了一個存儲過程:
CREATE PROCEDURE FindBooks
(
@list varchar(500)
)
AS
CREATE TABLE #parse_table (item varchar(500))
DECLARE @temp VARCHAR(500)
DECLARE @result VARCHAR(500)
DECLARE @str VARCHAR(500)
DECLARE @pos SMALLINT
SET @temp = RTRIM(LTRIM(@list))
SET @pos = 1
WHILE @pos > 0
BEGIN
SET @pos = CHARINDEX('|',@temp)
IF @pos > 0
BEGIN
SET @result = SUBSTRING(@temp,1,@pos - 1)
SET @temp = RTRIM(LTRIM(SUBSTRING(@temp,@pos+1,LEN(@temp) - @pos)))
INSERT INTO #parse_table
SELECT @result
END
ELSE
INSERT INTO #parse_table
SELECT @temp
END
SELECT * FROM Books WHERE Title in (select * from #parse_table)
只需創建您的書名的列表作爲一個簡單的字符串(含任何嵌入式單引號,CRLFs和等等)並使用參數化查詢。當然,您的存儲過程除了分隔列表外還可以包含其他內容。
這是一條切線的評論,但仍然很重要。如果你在管理工作室爲你自己的查詢做這件事,那很好。但是,如果你正在做這個_programmatically_ —建立你的查詢字符串,並在客戶端程序— __你做錯wrong_。您需要參數化查詢。 – 2009-08-12 15:25:29
你的建議,你需要運行1選擇參數的每個值是不正確的。使用Table-Valued-Parameter OR XML或使用逗號分隔字符串並在SQL Server端將其解壓縮。這將是一個查詢。 http://www.sommarskog.se/arrays-in-sql-2008.html – Davos 2014-02-18 01:46:56