列名中的动态 SQL 以获取该列的最大值
Dynamic SQL in column name to get max of that column
我有以下查询,我想获取在动态 SQL 中创建的列的最大值。但结果并不相同。
你能帮我解决这个问题吗?
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
SELECT max(KWh_RT1401A_BLU) AS Test1,
max('KWh_'+@RT+'A_BLU') AS Test2
FROM [PlantData].[dbo].[POD14_Kwh]
where timestamp >='2017-08-24'
结果是:
Test1 Test2
------------- ---------------
730.3399 KWh_RT1401A_BLU
你需要像下面这样的动态 sql
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
DECLARE @SQL VARCHAR(MAX)
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'+@RT+'A_BLU) AS Test2 '+
' FROM [PlantData].[dbo].[POD14_Kwh] '+
' where timestamp >=''2017-08-24'''
EXEC( @SQL)
根据您的评论
Now, I have bigger problem, I can't pass datetime into my dynamic SQL. I also try Cast / Convert, in triple quote but still has issue
修改后的解决方案如下
CREATE TABLE [POD14_Kwh]( [KWh_RT1401A_BLU] int, timestamp datetime)
INSERT INTO POD14_Kwh VALUES
(730.3399,'2017-08-24 00:00:00'),(1.00,'2017-08-24 00:00:00');
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
DECLARE @SQL VARCHAR(MAX)
DECLARE @dt DATETIME
SET @dt = '2017-08-24 00:00:00'
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'+@RT+'A_BLU) AS Test2 '+
' FROM [POD14_Kwh] '+
' where timestamp >='''+CAST(@dt as varchar(max))+''''
EXEC( @SQL)
Dhruv Joshi
是正确的,您需要使用动态 SQL。在您的示例中,您创建了一个字符串而不是引用了一个列名。确保执行动态 SQL 字符串也能收到所需的输出。
DECLARE @RT VARCHAR(6)
,@SQL VARCHAR(MAX)
SET @RT = 'RT1401'
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'+@RT+'A_BLU) AS Test2 '+
' FROM [PlantData].[dbo].[POD14_Kwh] '+
' where timestamp >= ''2017-08-24'''
EXEC (@SQL)
我有以下查询,我想获取在动态 SQL 中创建的列的最大值。但结果并不相同。 你能帮我解决这个问题吗?
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
SELECT max(KWh_RT1401A_BLU) AS Test1,
max('KWh_'+@RT+'A_BLU') AS Test2
FROM [PlantData].[dbo].[POD14_Kwh]
where timestamp >='2017-08-24'
结果是:
Test1 Test2
------------- ---------------
730.3399 KWh_RT1401A_BLU
你需要像下面这样的动态 sql
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
DECLARE @SQL VARCHAR(MAX)
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'+@RT+'A_BLU) AS Test2 '+
' FROM [PlantData].[dbo].[POD14_Kwh] '+
' where timestamp >=''2017-08-24'''
EXEC( @SQL)
根据您的评论
Now, I have bigger problem, I can't pass datetime into my dynamic SQL. I also try Cast / Convert, in triple quote but still has issue
修改后的解决方案如下
CREATE TABLE [POD14_Kwh]( [KWh_RT1401A_BLU] int, timestamp datetime)
INSERT INTO POD14_Kwh VALUES
(730.3399,'2017-08-24 00:00:00'),(1.00,'2017-08-24 00:00:00');
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
DECLARE @SQL VARCHAR(MAX)
DECLARE @dt DATETIME
SET @dt = '2017-08-24 00:00:00'
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'+@RT+'A_BLU) AS Test2 '+
' FROM [POD14_Kwh] '+
' where timestamp >='''+CAST(@dt as varchar(max))+''''
EXEC( @SQL)
Dhruv Joshi
是正确的,您需要使用动态 SQL。在您的示例中,您创建了一个字符串而不是引用了一个列名。确保执行动态 SQL 字符串也能收到所需的输出。
DECLARE @RT VARCHAR(6)
,@SQL VARCHAR(MAX)
SET @RT = 'RT1401'
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'+@RT+'A_BLU) AS Test2 '+
' FROM [PlantData].[dbo].[POD14_Kwh] '+
' where timestamp >= ''2017-08-24'''
EXEC (@SQL)