簡體   English   中英

嘗試從表映射中選擇時,SQL Server錯誤“無效的列名”

[英]SQL Server error “Invalid Column Name” when trying to select from table mapping

SELECT 
    (CONVERT(VARCHAR(11), tb.Timestamp, 108)) AS MeasuredDateTime,
    CAST(tb.Mould_protection_force_actual_value * 200 AS  NUMERIC(18, 2))
FROM 
    (SELECT Table_name 
     FROM PIM01_Group_Mapping 
     WHERE Param_code = 'IM0001') AS tb
WHERE  
    Tb.Timestamp > DATEADD(MINUTE, -1, GETDATE()) 
    AND tb.Timestamp < CONVERT(DATETIME, GetDate() - 0)
ORDER BY 
    MeasuredDateTime

我試圖使用FROM CLAUSE的select語句獲取表名,在該語句中我想獲取一些列值。

遇到錯誤

無效的欄

我的想法是我希望在執行上述過程時從映射表中動態加載表名和列名。

有任何想法嗎?

您需要編寫DYNAMIC QUERY

嘗試這個:

解決方案1:

DECLARE @Query VARCHAR(2000),@TableName VARCHAR(500)

SELECT @TableName = Table_name FROM PIM01_Group_Mapping WHERE Param_code = 'IM0001'

SET @Query='
SELECT (CONVERT(VARCHAR(11),tb.Timestamp,108)) as MeasuredDateTime,
    CAST(tb.Mould_protection_force_actual_value * 200 AS  NUMERIC(18,2))
FROM '+@TableName+' AS tb
WHERE  Tb.Timestamp > DATEADD(MINUTE,-1,GETDATE()) AND tb.Timestamp < CONVERT(DATETIME,GetDate()-0)
ORDER BY MeasuredDateTime'

EXEC (@Query)

解決方案2:

或者,您直接在查詢中調用表名。

DECLARE @Query VARCHAR(2000)

SET @Query='
SELECT (CONVERT(VARCHAR(11),tb.Timestamp,108)) as MeasuredDateTime,
    CAST(tb.Mould_protection_force_actual_value * 200 AS  NUMERIC(18,2))
FROM '+(SELECT Table_name FROM PIM01_Group_Mapping WHERE Param_code = 'IM0001')+' AS tb
WHERE  Tb.Timestamp > DATEADD(MINUTE,-1,GETDATE()) AND tb.Timestamp < CONVERT(DATETIME,GetDate()-0)
ORDER BY MeasuredDateTime'

EXEC (@Query)

如果要查看查詢,請使用“ Print獲取執行查詢。

PRINT (@Query)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM