[英]Altering a stored procedure not throwing “Invalid column name” error when that particular column is removed from the table in 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.