आप कन्वर्ट करने के लिए न केवल एक string
int
करने की कोशिश कर रहे हैं, लेकिन कईint
रों में में। क्या आप उम्मीद करते हैं कि आपके SELECT
सरणी में सूचीबद्ध सभी कर्मचारी के साथ और आईडी वापस कर देगा?
मुझे एहसास है कि आप बिना किसी फ़ंक्शन के करना चाहते थे। हालांकि, इस तरह मैं वर्तमान में यह करता हूं और यह बहुत अच्छा काम करता है। मेरे उत्तर से आप क्या करेंगे ले लो।
यह कोड while
लूप का उपयोग करता है जो कि यदि आप SQL 2005/2008 में हैं तो रिकर्सिव सीटीई में सुधार किया जा सकता है। आप फ़ंक्शन के आउटपुट को उस तालिका के रूप में उपयोग कर सकते हैं जो आपको INNER JOIN
है जिससे आपको बहुत तेज़ी से फ़िल्टर करने की अनुमति मिल जाएगी।
/*
************************************************************************************************************************
Name: ConvertDelimitedListIntoTable
Description: Converts a list of delimited values into a table for use like a dynamic IN statment
Modification History
Date Author Description
========== ============ ====================================
2009-01-31 B. Williams Initial Creation
************************************************************************************************************************
*/
ALTER FUNCTION [dbo].[ConvertDelimitedListIntoTable] (
@list NVARCHAR(MAX) ,@delimiter CHAR(1))
RETURNS @table TABLE (
item VARCHAR(255) NOT NULL)
AS
BEGIN
DECLARE @pos INT ,@nextpos INT ,@valuelen INT
SELECT @pos = 0 ,@nextpos = 1
WHILE @nextpos > 0
BEGIN
SELECT @nextpos = CHARINDEX(@delimiter,@list,@pos + 1)
SELECT @valuelen = CASE WHEN @nextpos > 0 THEN @nextpos
ELSE LEN(@list) + 1
END - @pos - 1
INSERT @table (item)
VALUES (CONVERT(INT,SUBSTRING(@list,@pos + 1,@valuelen)))
SELECT @pos = @nextpos
END
DELETE FROM @table
WHERE item = ''
RETURN
END
उपयोग:
DECLARE @intArray varchar(200)
SELECT *
FROM tbl_Employee e
INNER JOIN dbo.ConvertDelimitedListIntoTable(@intArray,',') arr
ON e.EmployeeID = arr.Item
वहाँ भी एक त्वरित तरीका एक tally
तालिका के साथ यह करने के लिए हो सकता है।
SQL सर्वर का कौन सा संस्करण? और क्या आप अपने एसपी को कॉल करने वाले कोड को बदलने में सक्षम हैं? –
@ डेमियन एसक्यूएल सर्वर 2005. हाँ, मैं अपने एसपी को कॉल करने वाले कोड को बदलने में सक्षम हूं। – Kukoy
चूहों। 2008 के लिए, मैं टेबल मूल्यवान पैरामीटर का उपयोग करने के लिए बदलने का सुझाव देना चाहूंगा। –