Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
fphoenix
Starting Member
1 Post |
Posted - 2015-04-10 : 11:51:12
|
I'm having an issue using a bit column as a parameter in the where clause of a query. When I use the column as a parameter in the where clause, no results are returned. Can someone help me understand why the query below doesn't work? Will I have to use dynamic SQL in order for the condition in the where clause to return results? CREATE TABLE [dbo].[EmployeeTeams]( [Id] [int] IDENTITY(1,1) NOT NULL, [Emp_Id] [bigint] NULL, [A] [bit] NULL, [B] [bit] NULL, [C] [bit] NULL, [D] [bit] NULL, [E] [bit] NULL, [F] [bit] NULL)DECLARE @Team VARCHAR(1) = NULLSET @Team = 'A'SELECT *FROM Employee eLEFT OUTER JOIN Employeeteams t ON e.Emp_id = t.Emp_IdWHERE ( @Team IS NULL OR ('t.' + Quotename(@Team)) = '1' ) |
|
MichaelJSQL
Constraint Violating Yak Guru
252 Posts |
Posted - 2015-04-10 : 12:37:15
|
That won't work. 't.' + Quotename(@Team)) will not be evaluated as a column. you would need to dynamic sql for something like this. |
|
|
MichaelJSQL
Constraint Violating Yak Guru
252 Posts |
Posted - 2015-04-10 : 12:46:19
|
You could do some stuff with bitwise: This example uses a Cartesian and is only for quick demo purposes, but you might be able to use the principles to accomplish what you want or you could use dynamic sql . CREATE TABLE #EmployeeTeams( [Id] [int] IDENTITY(1,1) NOT NULL, [Emp_Id] [bigint] NULL, [Team] int ) INSERT INTO #EmployeeTeams VALUES(1,2),(2,4),(3,2),(4,16) CREATE TABLE #Teams ( Team Int , TeamName Char(1) ) INSERT INTO #Teams VALUES (2,'A'), (4,'B'), (8,'C'), (16,'D'), (32,'E'), (64,'F') SELECT * FROM #EmployeeTeams T1, #Teams T2 WHERE (T1.Team & T2.Team = T2.Team) AND T2.TeamName = 'A' |
|
|
Kristen
Test
22859 Posts |
Posted - 2015-04-12 : 07:42:04
|
Alternatively:WHERE ( @Team IS NULL OR (@Team = 'A' AND [A] = 1) OR (@Team = 'B' AND [B] = 1) ... ) Probably won't perform very well if the data table is large! |
|
|
|
|
|
|
|