Sto notando che quando uso questa dichiarazione, la colonna Action
non è annullabile:Come controllare nullability in SELECT INTO per le colonne letterali a base
SELECT TOP 0 SerialNumber, 0 [Action] INTO #MyTable FROM FSE_SerialNumber
Ma quando uso questa dichiarazione, la colonna Action
è annullabile:
SELECT TOP 0 SerialNumber, CAST(0 as int) [Action] INTO #MyTable FROM FSE_SerialNumber
la ragione per la creazione della tabella in questo modo è perché non voglio che la tabella temporanea di ereditare le regole di confronto SerialNumber dalle regole di confronto di default del server o altrove. Voglio che corrisponda alle regole di confronto di FSE_SerialNumber..SerialNumber.
La mia domanda è: posso contare sulla funzione di cast che mi dà una colonna nullable, o non è chiaramente definita e potrebbe cambiare. Perché il cast improvvisamente rende nullable la colonna? C'è un modo migliore (oltre ai commenti) per chiarire che il mio intento è quello di ottenere una colonna nullable lì?
Non so che questo è documentato, ma altrove ho anche visto la tecnica di usare una variabile piuttosto che un valore letterale per produrre una colonna nullable.Suppongo che sia perché la variabile (come la tua espressione) ha una struttura i cui metadati permettono i NULL, così fa anche la nuova colonna. E se hai chiamato la tua variabile @NullableInt in grado di gestire il tuo problema di auto-documentazione. – GilM