我一直試圖從CASE(def.OPTION_CATEGORY_ID)
中選擇一個文本結果,但我很難實施條款。如何僅在列存在時使用SQL列名稱?
我想要做的是檢查是否OPTION_CATEGORY_ID
是sys.columns中的現有列。如果是,那麼我試圖通過在底部使用When - Then
來進行文本翻譯,但SQL不知道列名,所以CASE(def.OPTION_CATEGORY_ID)
由於列名無效而失敗。
有什麼辦法可以使用別名調用def.OPTION_CATEGORY_ID
,這樣SQL就不會讓它事先失效嗎? 感謝
SELECT DISTINCT *
FROM
(SELECT def.OPTION_DEF_ID AS 'Def ID',
ass.ASSET_NAME AS 'Asset Name',
CASE(def.OPTION_TYPE_ID)
WHEN 1 THEN 'A'
WHEN 2 THEN 'B'
END AS 'Option Type',
case when exists (SELECT name
FROM sys.columns
WHERE Name = 'OPTION_CATEGORY_ID'
AND Object_ID = Object_ID(N'TFC_OPTION_DEFINITION'))
then
-- Column Exists
CASE(def.OPTION_CATEGORY_ID)
WHEN 1 THEN 'C'
WHEN 2 THEN 'D'
WHEN 3 THEN 'E'
WHEN 4 THEN 'F'
end
End AS 'test' ,
-- the rest of the select
你試圖做太多一次。這種「SQL-SQL」不起作用。你需要做的是查詢模式,並生成一個單一的字符串變量,它包含一個新的SQL語句*(寫SQL的SQL)*。然後,作爲一個單獨的步驟,您可以使用'EXEC sp_executesql'作爲SQL語句運行該字符串,該EXEC sp_executesql還支持參數化查詢。 Google'Dynamic-SQL和SQL-Server'獲取更多細節。 – MatBailie
這個要求背後的目標是什麼?也許有一個更簡單的方法去那裏... – Paolo
我的數據庫可能並且可能沒有在def中的列「OPTION_CATEGORY_ID」。 我想在這兩種情況下使用相同的查詢,但是當它存在時,我希望底部情況爲int ID生成正確的文本轉換。 –