SQL 2005, campo di tipo bit

giovedì 09 agosto 2007 - 08.53

elsinore Profilo | Junior Member

Ciao a tutti,

ho il seguente problema, devo trasportare dei dati da una tabella ad un'altra, e ho dei problemi con il campo di tipo "bit", dalla tabella sorgente prelevo il valore che è "False", ma quando cerco di inserirlo nel campo della tabella corrispondente...sempre di tipo bit, mi da un errore di compatibilità... nell'inserto ho provato a scrivere False e 'False', ma niente.....qualcuno ha qualche suggerimento?

grazie

lbenaglia Profilo | Guru

>ho il seguente problema, devo trasportare dei dati da una tabella
>ad un'altra, e ho dei problemi con il campo di tipo "bit", dalla
>tabella sorgente prelevo il valore che è "False", ma quando cerco
>di inserirlo nel campo della tabella corrispondente...sempre
>di tipo bit, mi da un errore di compatibilità... nell'inserto
>ho provato a scrivere False e 'False', ma niente.....qualcuno
>ha qualche suggerimento?

Ciao elsinore,

il data type bit accetta solo i valori: 0 (false), 1 (true) e NULL.
I Books Online riportano: "The string values TRUE and FALSE can be converted to bit values: TRUE is converted to 1 and FALSE is converted to 0".

Infatti:

SELECT CAST('TRUE' as bit) as True, CAST('FALSE' as bit) as False; /* Output: True False ----- ----- 1 0 (1 row(s) affected) */ CREATE TABLE dbo.Bits( myBit bit NOT NULL ); INSERT dbo.Bits VALUES(0); INSERT dbo.Bits VALUES(1); INSERT dbo.Bits VALUES('TRUE'); INSERT dbo.Bits VALUES('FALSE'); SELECT * FROM dbo.Bits; /* Output: myBit ----- 0 1 1 0 (4 row(s) affected) */ DROP TABLE dbo.Bits;

Quindi c'è qualcosa che non mi torna in quello che hai scritto

>grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

elsinore Profilo | Junior Member

nei vari attributi del campo bit ho settato
default value or binding = (0)


così mi accetta 0 e 1...


però nn capisco perchè nell'altro campo.....con i parametri uguali, c'è scritto... False....

lbenaglia Profilo | Guru

>nei vari attributi del campo bit ho settato
>default value or binding = (0)
Dove?

>però nn capisco perchè nell'altro campo.....con i parametri uguali,
>c'è scritto... False....
Quale altro campo? Quali altri parametri?
Cerca di fornire tutte le informazioni necessarie per riprodurre quello che stai facendo...

Ciao!


--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

elsinore Profilo | Junior Member

allora, come ho detto sopra, sto cercando di copiare una riga di una tabella, in un'altra tabella......

uno dei campi di questa tabella è di tipo bit....e contiene valore False....

io cosa faccio.....select dalla tabella sorgente..ecc..ecc.... e poi insert nella mia nuova.....insert into pippo (campobit) value (False)....e mi dava errore....

ora, su sql 2005 in modalità design...ho visto, tra le varie proproietà della colonna di tipo bit questo default value or binding......l'ho settato, come per l'altra tabella a (0)......ora mi accetta i valori 0
insert into pippo (campobit) value (0).....per nn capisco come mai nell'altra tabella, nel campo di tipo bit.....che è uguale a questo.....i valori nel campo siano False....


1280x800 169Kb

lbenaglia Profilo | Guru

>uno dei campi di questa tabella è di tipo bit....e contiene valore
>False....
Ti ho dimostrato nel primo post che non può essere dato che il data type bit accetta solo i valori NUMERICI 0 e 1 oppure il "non valore" NULL.
Al più le stringhe "TRUE" e "FALSE" vengono automaticamente castate a 1 e 0.

>ora, su sql 2005 in modalità design...ho visto, tra le varie
>proproietà della colonna di tipo bit questo default value or
>binding......l'ho settato, come per l'altra tabella a (0)......ora
>mi accetta i valori 0
>insert into pippo (campobit) value (0).....per nn capisco come
>mai nell'altra tabella, nel campo di tipo bit.....che è uguale
>a questo.....i valori nel campo siano False....
Posta la struttura delle due tabelle (CREATE TABLE...), alcune righe di prova (INSERT INTO...) ed il risultato che vuoi ottenere.

P.S.: l'immagine è troppo grande ed è impossibile leggerla.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

elsinore Profilo | Junior Member

Ciao,
alla fine ho risolto..... il campo lo "casta" lui quando gli passo 0 o 1.....



ti chiedo un'altra cosa però..... nella riga che mi copio, c'è anche un campo di tipo "uniqueidentifier"....nella tabella nuova come lo copio?

ho provato a vedere cosa succede se prendo il valore del campo (a parte che sono tutti simboli strani) e lo metto direttamente in quello nuovo ma mi da errore... come è meglio muoversi in questi casi?

grazie

lbenaglia Profilo | Guru

>alla fine ho risolto..... il campo lo "casta" lui quando gli
>passo 0 o 1.....
Eh?! 0 e 1 non vengono castati, solo "TRUE" e "FALSE" lo sono!

>ti chiedo un'altra cosa però..... nella riga che mi copio, c'è
>anche un campo di tipo "uniqueidentifier"....nella tabella nuova
>come lo copio?

USE tempdb; CREATE TABLE dbo.Bits( id uniqueidentifier NOT NULL, myBit bit NOT NULL ); INSERT dbo.Bits VALUES('DD627EA5-AD71-4041-BA93-EE8B8F6047EC', 0); INSERT dbo.Bits VALUES('21EF892D-074A-45B4-B97F-18518300BA84', 1); INSERT dbo.Bits VALUES('7130662A-26A7-42FA-B0F5-93A7BD2F6334', 'TRUE'); INSERT dbo.Bits VALUES('A43CE90A-440C-4999-A3C9-11B3C143108A', 'FALSE'); SELECT * FROM dbo.Bits; /* Output: id myBit ------------------------------------ ----- DD627EA5-AD71-4041-BA93-EE8B8F6047EC 0 21EF892D-074A-45B4-B97F-18518300BA84 1 7130662A-26A7-42FA-B0F5-93A7BD2F6334 1 A43CE90A-440C-4999-A3C9-11B3C143108A 0 (4 row(s) affected) */ DROP TABLE dbo.Bits;

>ho provato a vedere cosa succede se prendo il valore del campo
>(a parte che sono tutti simboli strani) e lo metto direttamente
>in quello nuovo ma mi da errore... come è meglio muoversi in
>questi casi?
Boh, a me errori come vedi non ne da.

>grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

elsinore Profilo | Junior Member

mi sono spiegato di me**a!


intendevo dire questo

if MASTER_del = 'False' then
begin
MASTER_del := '0'
end;
if MASTER_del = 'True' then
begin
MASTER_del := '1'
end;

dal DB leggo true o false....e ci scrivo 1 o 0....poi quando vado a vedere la riga nel DB lui mi ha scritto 'True' o 'False'...

per il problema dell'uniqueidentifier, ho risolto così.... ho messo nell properties del campo, alla voce

Default Value or Binding....questo... (newid())

così in automatico mi aggiorna il campo!


grazie!

lbenaglia Profilo | Guru

>intendevo dire questo
>
> if MASTER_del = 'False' then
> begin
> MASTER_del := '0'
> end;
> if MASTER_del = 'True' then
> begin
> MASTER_del := '1'
> end;

Che codice è? Non mi sembra T-SQL...

>dal DB leggo true o false....e ci scrivo 1 o 0....poi quando
>vado a vedere la riga nel DB lui mi ha scritto 'True' o 'False'...
Boh, io non ti seguo più, probabilmente stiamo parlando di prodotti diversi
In SQL Server il data type bit accetta ESCLUSIVAMENTE 1, 0 e NULL. Nient'altro!

>grazie!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

elsinore Profilo | Junior Member

infatti è delphi!


provo a chiarie....... il campo bit (come mi dici tu...e mi fido), accetta solo 0 e 1....e null.....solo che quando poi vado a vedere cosa mi ha scritto nel DB (almeno il mio!)....mi trovo scritto o true o false....nn 0 o 1.....quindi io cosa ho fatto, via codice, ho trasformato true o false....che leggo dal DB...in 0 e 1..... pero poi poterli scrivere nel campo bit della mia tabella nuova....

lbenaglia Profilo | Guru

>provo a chiarie....... il campo bit (come mi dici tu...e mi fido),
>accetta solo 0 e 1....e null.....solo che quando poi vado a vedere
>cosa mi ha scritto nel DB (almeno il mio!)....mi trovo scritto
>o true o false....nn 0 o 1.....
E' lo strumento che utilizzi (Access?!) che ti codifica 0 in False e 1 in True, ma nella tabella avrai 0 e 1.

>quindi io cosa ho fatto, via
>codice, ho trasformato true o false....che leggo dal DB...in
>0 e 1..... pero poi poterli scrivere nel campo bit della mia
>tabella nuova....
Facendo una INSERT...SELECT questa operazione non serve.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

elsinore Profilo | Junior Member

Uso SQL 2005.......

cmq prendevo la query che si creava nel programma.....e la eseguivo direttamente su SQL.... e andava a buon fine solo se i valori erano 0 e 1........ nn so chi e cosa poi me li tramuta in true o false sul DB!!......
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5