Campo bool in SQL Server 2000
mickysantomax
mickysantomax non è online. Ultima attività: 19/05/2009 17.57.55mickysantomax
il 3 dicembre 2008 alle 23.13
53 messaggi dal 16 ottobre 2006
Salve, ho la necessità di realizzare un campo di tipo bool in una tabella di SQL Server 2000. Documentandomi in rete ho scoperto che il tipo più adatto per fare queste cose e' BIT (sottotipo di INT) che prevede due valori, 0 e 1. Il problema e' che ho provato ad impostare al campo il tipo BIT ma accetta solo valori 0 e -1, e' normale ? Se si, quale dei due equivale a true e quale a false ?

Grazie anticipatamente
Microsoft Most Valuable Professional
RE: Campo bool in SQL Server 2000
Andrea Montanari
Andrea Montanari non è online. Ultima attività: 04/07/2009 16.52.37Andrea Montanari Top Poster
il 4 dicembre 2008 alle 01.04
Contributi | www.asql.biz | 1.134 messaggi dal 27 luglio 2005
salve
mickysantomax ha scritto:
Salve, ho la necessità di realizzare un campo di tipo bool in una tabella di SQL Server 2000. Documentandomi in rete ho scoperto che il tipo più adatto per fare queste cose e' BIT (sottotipo di INT) che prevede due valori, 0 e 1. Il problema e' che ho provato ad impostare al campo il tipo BIT ma accetta solo valori 0 e -1, e' normale ?


non e' possibile.. qualsiasi valore diverso da 0 viene automaticamente convertgito in 1, in quanto, appunto come gia' hai indicato, il tipo di dato bit e' nel dominio degli interi con restrizione a valori 0/1
prova ad eseguire
SET NOCOUNT ON;
CREATE TABLE dbo.t (
Id int PRIMARY KEY,
b1 bit,
b2 bit,
b3 bit,
b4 bit
);
INSERT INTO dbo.t VALUES ( 1, 1, -1, 1000, -1000);
SELECT * FROM dbo.t;
GO
DROP TABLE dbo.t;

e vedrai che otterrai sempre e solo "1"..

il "-1" veniva utilizzato per definire il valore di True anche in ambiente Visual Basic, mentre solitamente i linguaggi di programmazione definiscono il vero == 1
piu' indietro nel tempo, sempre in vb, era uso dichiarare due costanti quali
const True = -1
const False = Not True

Se si, quale dei due equivale a true e quale a false ?
Grazie anticipatamente

per definizione, 0=False, Not False=True (ergo Not 0, ergo 1/-1/..)
saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
http://www.hotelsole.com - http://www.hotelsolericcione.de
RE: Campo bool in SQL Server 2000
mickysantomax
mickysantomax non è online. Ultima attività: 19/05/2009 17.57.55mickysantomax
il 4 dicembre 2008 alle 18.20
53 messaggi dal 16 ottobre 2006
Ho provato ad eseguire solo questo :

Creato una nuova tabella con ID Primary Key di tipo Identity ed un campo b di tipo BIT

e poi ho fatto i seguenti insert :

INSERT INTO dbo.t VALUES (1);
INSERT INTO dbo.t VALUES (2);
INSERT INTO dbo.t VALUES (0);
INSERT INTO dbo.t VALUES (-1);
INSERT INTO dbo.t VALUES (-2);

Il risultato è che lo 0 me lo lascia a 0, mentre tutti gli altri li pone a -1, come mai ?
Microsoft Most Valuable Professional
Re: Campo bool in SQL Server 2000
Andrea Montanari
Andrea Montanari non è online. Ultima attività: 04/07/2009 16.52.37Andrea Montanari Top Poster
il 4 dicembre 2008 alle 18.28
Contributi | www.asql.biz | 1.134 messaggi dal 27 luglio 2005
salve,
mickysantomax wrote:
Ho provato ad eseguire solo questo :

Creato una nuova tabella con ID Primary Key di tipo Identity ed un campo b di tipo BIT

e poi ho fatto i seguenti insert :

INSERT INTO dbo.t VALUES (1);
INSERT INTO dbo.t VALUES (2);
INSERT INTO dbo.t VALUES (0);
INSERT INTO dbo.t VALUES (-1);
INSERT INTO dbo.t VALUES (-2);

Il risultato è che lo 0 me lo lascia a 0, mentre tutti gli altri li pone a -1, come mai ?

ma dove, con che strumento?... se interroghi ad esempio con SqlCMD.exe o SSMS il risultato e' 1 positivo..
saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
http://www.hotelsole.com - http://www.hotelsolericcione.de
Re: Campo bool in SQL Server 2000
mickysantomax
mickysantomax non è online. Ultima attività: 19/05/2009 17.57.55mickysantomax
il 4 dicembre 2008 alle 19.55
53 messaggi dal 16 ottobre 2006
Io lo interrogo con DbaMgr2000, ma non credo che il problema sia dovuto al tool
Microsoft Most Valuable Professional
Re: Campo bool in SQL Server 2000
Andrea Montanari
Andrea Montanari non è online. Ultima attività: 04/07/2009 16.52.37Andrea Montanari Top Poster
il 5 dicembre 2008 alle 00.19
Contributi | www.asql.biz | 1.134 messaggi dal 27 luglio 2005
salve,
mickysantomax ha scritto:
Io lo interrogo con DbaMgr2000, ma non credo che il problema sia dovuto al tool


lo conosco un po', quello strumento  ..

DbaMgr2k e' scritto in VB e proprio per questo motivo vedi quel risultato.. come in precedenza gia' indicato, VB utilizza 0/-1 per la rappresentazione "numerica" dei valori booleani, rappresentazione per certi versi fine a se' stessa in quanto il valore va appunto inteso come un booleano a tutti gli effetti e quindi True/False e non come un numero.. questo, in VB... cio' non toglie che il valore archiviato sia in effetti del data type "bit" e non boolean (che in SQL Server non c'e'), e che il suo valore sia 0/1 e non 0/-1 ovvero False/True.. il tipo bit e' nel dominio dei numeri interi con limitazione ai numeri 0/1.. poi ogni strumento che vi ci si connette lo rappresenta come meglio puo'/vuole... in SQL Server Management Studio (sia 2005 che 2008) avresti ad esempio True/False e non accetta valori numerici, e questo malgrado le "lamentele" che sono state sollevate in tal senso.. ma ad ogni modo cio' e' solo la rappresentazione del vero valore archiviato..
saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
http://www.hotelsole.com - http://www.hotelsolericcione.de
Re: Campo bool in SQL Server 2000
mickysantomax
mickysantomax non è online. Ultima attività: 19/05/2009 17.57.55mickysantomax
il 5 dicembre 2008 alle 11.38
53 messaggi dal 16 ottobre 2006
Scusa ma quando DbaMgr2K cerca di inserire il valore -1, il DB non dovrebbe arrabbiarsi e sollevare errore ?

O forse DbaMgr2K lo inserisce come 1 ma poi quando effettua la select lo visualizza all'utente come -1 ?
Microsoft Most Valuable Professional
Re: Campo bool in SQL Server 2000
Andrea Montanari
Andrea Montanari non è online. Ultima attività: 04/07/2009 16.52.37Andrea Montanari Top Poster
il 11 dicembre 2008 alle 12.28
Contributi | www.asql.biz | 1.134 messaggi dal 27 luglio 2005
salve,
mickysantomax wrote:
Scusa ma quando DbaMgr2K cerca di inserire il valore -1, il DB non dovrebbe arrabbiarsi e sollevare errore ?

O forse DbaMgr2K lo inserisce come 1 ma poi quando effettua la select lo visualizza all'utente come -1 ?

scusa il ritardo ma ero fuori citta'
DbaMgr2k per "quelle fuzionalita'", si basa su ADO... cosa poi faccia ADO, per molti versi, e' un bel mistero.. e' una black box che non e' tanto piaciuta agli sviluppatori in quanto poco customizzabile e quant'altro... ovviamente pero' converte il dato da salvare nel modo "opportuno" per la destinazione (in questo caso SQL Server)...
saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
http://www.hotelsole.com - http://www.hotelsolericcione.de

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.

Powered by .db Forums "Caesar Reborn" v. 2009.6.9