Ad esempio,
la tabella users potrebbe essere cosi' configurata:
id int: id utente
name varchar(255): nome utente
auth int: autorizzazione
...e con il seguente contenuto:
id | name | auth | |
---|---|---|---|
1 | Mario | 3 | (00001000) |
2 | Luigi | 4 | (00010000) |
3 | Toad | 5 | (00100000) |
In questi casi e' da evitare la select di tutti i record (select * from users) e il successivo controllo dei singoli bit via codice.
La soluzione invece piu' razionale prevede una select in grado di estrarre i soli record che hanno i bit che ci interessano impostati a 1.
In questi casi lo statement POWER e' l'istruzione che fa al caso nostro e la seguente istruzione sql e' quella che ci serve:
SELECT id, name, auth FROM users WHERE (POWER(2, ISNULL(auth, 0)) & 24 != 0)
Una volta eseguita visualizzera' il seguente risultato:
id | name | auth |
---|---|---|
1 | Mario | 3 |
2 | Luigi | 4 |
Istruzioni per creare la tabella:
CREATE TABLE [dbo].[users](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NOT NULL,
[auth] [int] NULL,
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]