Oracle version:
CREATE OR replace PROCEDURE Item_reco_recordset (p_depositid IN NUMBER,
p_b1 IN NUMBER,
p_itemset OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_itemset FOR
SELECT *
FROM pcwitem
WHERE deposittransid = p_depositid
AND ( ( Bitand(recostatecode, 1) > 0
AND Bitand(recostatecode, 5) != 0 )
OR ( Bitand(recostatecode, 2) > 0
AND Bitand(recostatecode, 6) != 0 )
OR ( p_b1 = 1
AND Bitand(recostatecode, 3) > 0
AND Bitand(recostatecode, 7) != 0 )
OR ( Bitand(recostatecode, 4) > 0
AND Bitand(recostatecode, 8) != 0 )
OR ( Bitand(recostatecode, 9) > 0
AND Bitand(recostatecode, 10) != 0 )
OR ( Bitand(recostatecode, 11) > 0
AND Bitand(recostatecode, 15) != 0 )
OR ( Bitand(recostatecode, 12) > 0 )
OR ( Bitand(recostatecode, 16) > 0
AND Bitand(recostatecode, 14) != 0 )
OR ( Bitand(recostatecode, 18) > 0 )
OR ( Bitand(recostatecode, 19) > 0
AND Bitand(recostatecode, 20) != 0 )
OR ( Bitand(recostatecode, 21) > 0 )
OR ( Bitand(recostatecode, 22) > 0 )
OR ( Bitand(recostatecode, 23) > 0
AND Bitand(recostatecode, 24) != 0 )
OR ( Bitand(recostatecode, 25) > 0
AND Bitand(recostatecode, 29) != 0 )
OR ( Bitand(recostatecode, 26) > 0 )
OR ( Bitand(recostatecode, 28) > 0 )
OR ( Bitand(recostatecode, 31) > 0 )
OR ( Bitand(recostatecode, 32) > 0
AND Bitand(recostatecode, 61) != 0 )
OR ( Bitand(recostatecode, 39) > 0 )
OR ( Bitand(recostatecode, 40) > 0
AND Bitand(recostatecode, 64) != 0 )
OR ( Bitand(recostatecode, 48) > 0 )
OR ( Bitand(recostatecode, 51) > 0 )
OR ( Bitand(recostatecode, 53) > 0
AND Bitand(recostatecode, 54) != 0 )
OR ( Bitand(recostatecode, 57) > 0
AND Bitand(recostatecode, 58) != 0 ) );
END item_reco_recordset;
SQL Server Version (throws error — bitand not a recognized built-in function):
IF OBJECT_ID('Item_reco_recordset', 'P') IS NOT NULL
DROP PROCEDURE Item_reco_recordset;
GO
CREATE PROCEDURE Item_reco_recordset (@p_depositid FLOAT,
@p_b1 FLOAT
)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM pcwitem
WHERE deposittransid = @p_depositid
AND ( ( Bitand(recostatecode, 1) > 0
AND Bitand(recostatecode, 5) != 0 )
OR ( Bitand(recostatecode, 2) > 0
AND Bitand(recostatecode, 6) != 0 )
OR ( @p_b1 = 1
AND Bitand(recostatecode, 3) > 0
AND Bitand(recostatecode, 7) != 0 )
OR ( Bitand(recostatecode, 4) > 0
AND Bitand(recostatecode, 8) != 0 )
OR ( Bitand(recostatecode, 9) > 0
AND Bitand(recostatecode, 10) != 0 )
OR ( Bitand(recostatecode, 11) > 0
AND Bitand(recostatecode, 15) != 0 )
OR ( Bitand(recostatecode, 12) > 0 )
OR ( Bitand(recostatecode, 16) > 0
AND Bitand(recostatecode, 14) != 0 )
OR ( Bitand(recostatecode, 18) > 0 )
OR ( Bitand(recostatecode, 19) > 0
AND Bitand(recostatecode, 20) != 0 )
OR ( Bitand(recostatecode, 21) > 0 )
OR ( Bitand(recostatecode, 22) > 0 )
OR ( Bitand(recostatecode, 23) > 0
AND Bitand(recostatecode, 24) != 0 )
OR ( Bitand(recostatecode, 25) > 0
AND Bitand(recostatecode, 29) != 0 )
OR ( Bitand(recostatecode, 26) > 0 )
OR ( Bitand(recostatecode, 28) > 0 )
OR ( Bitand(recostatecode, 31) > 0 )
OR ( Bitand(recostatecode, 32) > 0
AND Bitand(recostatecode, 61) != 0 )
OR ( Bitand(recostatecode, 39) > 0 )
OR ( Bitand(recostatecode, 40) > 0
AND Bitand(recostatecode, 64) != 0 )
OR ( Bitand(recostatecode, 48) > 0 )
OR ( Bitand(recostatecode, 51) > 0 )
OR ( Bitand(recostatecode, 53) > 0
AND Bitand(recostatecode, 54) != 0 )
OR ( Bitand(recostatecode, 57) > 0
AND Bitand(recostatecode, 58) != 0 ) );
END; item_reco_recordset;
Best Answer
I have a sql server query here that gives me the current user options. It uses a
bitwise AND
, which in sql server is&
.More information on the link below:
How does the operator “&” work in sql server?