Click here to Skip to main content
15,890,345 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
See more:
Hi friends.

I write one query as below and it returns all customer records.

SQL
DECLARE @CODE AS VARCHAR(20)
SET @CODE = NULL
SELECT * FROM CUSTOMER WHERE CUSTOMER.CUS_NO = COALESCE(@CODE,CUSTOMER.CUS_NO)


If I set @code = '1004' then it returns only one customer with CUS_NO = 1004.

SQL
DECLARE @CODE AS VARCHAR(20)
SET @CODE = '1004'
SELECT * FROM CUSTOMER WHERE CUSTOMER.CUS_NO = COALESCE(@CODE,CUSTOMER.CUS_NO)


Now My requirement is here.

I want customers list with using IN operator. I want to set multiple customer number with single quote in @CODE variable and using IN operator, I want to get all customers.

Like as

SQL
DECLARE @CODE AS VARCHAR(20)
SET @CODE = '1004,1003'
SELECT * FROM CUSTOMER WHERE CUSTOMER.CUS_NO IN (COALESCE(@CODE,CUSTOMER.CUS_NO))


I know the above syntax is wrong for IN operator but I want result of customer 1004 and 1003 and If I set @CODE = null then it should return all records. If there is any other way to accomplish my task. I do not want to execute Inner Query like set query in string and then execute it by sp_executesql statement.

Thanks

Imrankhan
Posted
Updated 20-Sep-11 20:58pm
v2

Hi Fri.. Try the below code

SQL
CREATE TABLE #tempTable (CUS_NO  int  NOT NULL,)
DECLARE @CODE AS VARCHAR(20),
        @tbl       varchar(30),
        @delimiter char(1) = ',' ,
        @sql varchar(8000),
        @select varchar(8000)
SET @tbl='#tempTable'
SET @CODE = '1,2,3,4,1003'
SET @select = 'SELECT ' + REPLACE(@CODE, @delimiter, ' SELECT ')
SET @select = REPLACE(@select, '''', '''''')
SET @sql = 'INSERT ' + @tbl + ' EXEC(''' + @select + ''')'
EXEC (@sql)
SELECT * FROM CUSTOMER
WHERE CUSTOMER.CUS_NO IN (
                          (select distinct CUS_NO from #tempTable
                           UNION
                           select CUSTOMER.CUS_NO)
                          )
DROP TABLE #tempTable
 
Share this answer
 
v2
Thanks for you feedback. But CUS_NO data type is nvarchar and your query gives me error "Conversion failed when converting the nvarchar value 'NYAUDI' to data type int" because one of value is "NYAUDI" that is not converted into int.
 
Share this answer
 
Comments
kishorekke 21-Sep-11 3:56am    
You can use Varchar insted int in that table like below

CREATE TABLE #tempTable (CUS_NO varchar(15))
DECLARE @CODE AS VARCHAR(20),
@tbl varchar(30),
@delimiter char(1) = ',' ,
@sql varchar(8000),
@select varchar(8000)
SET @tbl='#tempTable'
SET @CODE = '1,2,3,4,1003'
SET @select = 'SELECT ' + REPLACE(@CODE, @delimiter, ' SELECT ')
SET @select = REPLACE(@select, '''', '''''')
SET @sql = 'INSERT ' + @tbl + ' EXEC(''' + @select + ''')'
EXEC (@sql)
SELECT * FROM CUSTOMER
WHERE CUSTOMER.CUS_NO IN (
(select distinct CUS_NO from #tempTable
UNION
select CUSTOMER.CUS_NO)
)
DROP TABLE #tempTable
hi,
TRY THIS.

SQL
DECLARE @CODE AS VARCHAR(20)
SET @CODE = '1004,1003'
SELECT * FROM CUSTOMER WHERE CUSTOMER.CUS_NO IN (CASE WHEN ISNULL(@CODE,0)=0 THEN CUSTOMER.CUS_NO ELSE @CODE END)
 
Share this answer
 
Hi.
I am using below code.

SQL
CREATE FUNCTION dbo.SplitOrderIDs
(
	@OrderList varchar(500)
)
RETURNS 
@ParsedList table
(
	OrderID int
)
AS
BEGIN
	DECLARE @OrderID varchar(10), @Pos int

	SET @OrderList = LTRIM(RTRIM(@OrderList))+ ','
	SET @Pos = CHARINDEX(',', @OrderList, 1)

	IF REPLACE(@OrderList, ',', '') <> ''
	BEGIN
		WHILE @Pos > 0
		BEGIN
			SET @OrderID = LTRIM(RTRIM(LEFT(@OrderList, @Pos - 1)))
			IF @OrderID <> ''
			BEGIN
				INSERT INTO @ParsedList (OrderID) 
				VALUES (CAST(@OrderID AS int)) --Use Appropriate conversion
			END
			SET @OrderList = RIGHT(@OrderList, LEN(@OrderList) - @Pos)
			SET @Pos = CHARINDEX(',', @OrderList, 1)

		END
	END	
	RETURN
END
GO


SQL
CREATE PROC dbo.GetOrderList6
(
	@OrderList varchar(500)
)
AS
BEGIN
	SET NOCOUNT ON
	
	SELECT 	o.OrderID, CustomerID, EmployeeID, OrderDate
	FROM	dbo.Orders AS o
		JOIN
		dbo.SplitOrderIDs(@OrderList) AS s
		ON
		o.OrderID = s.OrderID
END
GO

GRANT EXEC ON dbo.GetOrderList6 TO WebUser
GO


But if I pass @OrderList NULL or blank then it returns nothing. My requirement is if @orderlist has value then return only those records and if it is null or blank then returns all records.

Its returning records if I pass some value in @orderList but problem is when @OrderList is null or blank.
Thanks
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900