2015-12-21 48 views
2

如果在SELECT語句中有如下一行:數據類型的IIF語句

iif(fr.BoundID=0,'OutBound','InBound') as 'FlightBound' 

後來,當我執行CREATE TABLE語句,我應該包括BoundID字段的實際數據類型是在TINYINT數據庫表,或者數據類型是varchar,因爲我認爲(但不是100%肯定地看着現有的代碼)以前寫這段代碼的人說如果ID是0就顯示'OutBound,InBound'?

+0

我認爲這取決於你在IIF返回的內容。在你的情況下,它的VARCHAR。 –

+0

謝謝大家的回答,我還有另外一個問題,我需要發佈一些我以前沒有遇到過的問題。 – BruceyBandit

回答

2

在你的情況下,它將是VARCHAR(8)。您可以使用sys.dm_exec_describe_first_result_set隨時檢查元數據:

SELECT * 
FROM sys.dm_exec_describe_first_result_set(
    'SELECT iif(BoundID=0,''OutBound'',''InBound'') as ''FlightBound'' 
    FROM #tab',NULL,0) 

LiveDemo

什麼數據類型來選擇新表TINYINT VS Textual representation是依賴於您的業務需求。我可能會留在TINYINT(搜索名爲BoundType的查找表或詢問高級開發人員/架構師)。

1

返回類型是最高precendence在true_valuefalse_value類型(reference,見return types

返回與從true_value和false_value的類型最高優先級的數據類型。有關更多信息,請參閱數據類型優先級(Transact-SQL)。

數據類型precendence here了到SQL Server 2016

user-defined data types (highest) 
sql_variant 
xml 
datetimeoffset 
datetime2 
datetime 
smalldatetime 
date 
time 
float 
real 
decimal 
money 
smallmoney 
bigint 
int 
smallint 
tinyint 
bit 
ntext 
text 
image 
timestamp 
uniqueidentifier 
nvarchar (including nvarchar(max)) 
nchar 
varchar (including varchar(max)) 
char 
varbinary (including varbinary(max)) 
binary (lowest)