如果在SELECT語句中有如下一行:數據類型的IIF語句
iif(fr.BoundID=0,'OutBound','InBound') as 'FlightBound'
後來,當我執行CREATE TABLE語句,我應該包括BoundID字段的實際數據類型是在TINYINT數據庫表,或者數據類型是varchar,因爲我認爲(但不是100%肯定地看着現有的代碼)以前寫這段代碼的人說如果ID是0就顯示'OutBound,InBound'?
如果在SELECT語句中有如下一行:數據類型的IIF語句
iif(fr.BoundID=0,'OutBound','InBound') as 'FlightBound'
後來,當我執行CREATE TABLE語句,我應該包括BoundID字段的實際數據類型是在TINYINT數據庫表,或者數據類型是varchar,因爲我認爲(但不是100%肯定地看着現有的代碼)以前寫這段代碼的人說如果ID是0就顯示'OutBound,InBound'?
在你的情況下,它將是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)
什麼數據類型來選擇新表TINYINT
VS Textual representation
是依賴於您的業務需求。我可能會留在TINYINT
(搜索名爲BoundType的查找表或詢問高級開發人員/架構師)。
返回類型是最高precendence在true_value
和false_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)
我認爲這取決於你在IIF返回的內容。在你的情況下,它的VARCHAR。 –
謝謝大家的回答,我還有另外一個問題,我需要發佈一些我以前沒有遇到過的問題。 – BruceyBandit