यह सबसे अच्छा स्रोत है उपर्युक्त लिंक जो आपके लिए यह करना चाहिए ...
इससे पहले कि आप मेरी फ़ंक्शन का उपयोग करें, आप एक "सहायक" तालिका सेट करने की आवश्यकता है, आप केवल डेटाबेस प्रति इस एक बार करने की जरूरत है: अपने स्ट्रिंग है, जो पाश नहीं है विभाजित करने के लिए
CREATE TABLE Numbers
(Number int NOT NULL,
CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
DECLARE @x int
SET @x=0
WHILE @x<8000
BEGIN
SET @[email protected]+1
INSERT INTO Numbers VALUES (@x)
END
उपयोग इस समारोह और बहुत तेजी से है:
CREATE FUNCTION [dbo].[FN_ListToTable]
(
@SplitOn char(1) --REQUIRED, the character to split the @List string on
,@List varchar(8000) --REQUIRED, the list to split apart
)
RETURNS
@ParsedList table
(
ListValue varchar(500)
)
AS
BEGIN
/**
Takes the given @List string and splits it apart based on the given @SplitOn character.
A table is returned, one row per split item, with a column name "ListValue".
This function workes for fixed or variable lenght items.
Empty and null items will not be included in the results set.
Returns a table, one row per item in the list, with a column name "ListValue"
EXAMPLE:
----------
SELECT * FROM dbo.FN_ListToTable(',','1,12,123,1234,54321,6,A,*,|||,,,,B')
returns:
ListValue
-----------
1
12
123
1234
54321
6
A
*
|||
B
(10 row(s) affected)
**/
----------------
--SINGLE QUERY-- --this will not return empty rows
----------------
INSERT INTO @ParsedList
(ListValue)
SELECT
ListValue
FROM (SELECT
LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue
FROM (
SELECT @SplitOn + @List + @SplitOn AS List2
) AS dt
INNER JOIN Numbers n ON n.Number < LEN(dt.List2)
WHERE SUBSTRING(List2, number, 1) = @SplitOn
) dt2
WHERE ListValue IS NOT NULL AND ListValue!=''
RETURN
END --Function FN_ListToTable
आप में एक तालिका के रूप में इस समारोह का उपयोग कर सकते एक में शामिल होने:
SELECT
Col1, COl2, Col3...
FROM YourTable
INNER JOIN dbo.FN_ListToTable(',',@YourString) s ON YourTable.ID = s.ListValue
यहाँ हटाना है:
DELETE YourTable
FROM YourTable d
LEFT OUTER JOIN dbo.FN_ListToTable(',',@Parameter) s ON d.ID=s.ListValue
WHERE s.ListValue IS NULL
देखते हैं कि यह नहीं http का डुप्लिकेट है stackoverflow.com/questions/114504/is-it-possible-to-send-a-collection-of-ids-as-a-ado-net-sql-parameter? –
@ जॉन सॉंडर्स, कई "पैरामीटर के रूप में पास सरणी" एसक्यूएल सर्वर प्रश्न हैं। हालांकि, इसमें एक जोड़ा मोड़ है, प्रश्न के पैरामीटर भाग को छोड़कर सभी पंक्तियों को हटा दें। नतीजतन, मुझे नहीं लगता कि यह एक डुप्लिकेट है। –
जॉन सॉंडर्स, मुझे नहीं पता कि मैंने एक खोज की है लेकिन मुझे वह नहीं मिला जो मैं ढूंढ रहा था। क्या इसमें कोई समस्या है? – markiz