在SELECT查询

问题描述:

使用变量我想运行下面的SELECT查询:在SELECT查询

DECLARE @ColumnName nvarchar(50) 
SET @ColumnName = 'AlarmID' -- actually these are calculated 
          -- by another SELECT but this isn't relevant 
SELECT MIN(@ColumnName) FROM INSERTED 

这是不行的,它返回@ColumnName的值而不是实际的数据。我该如何做这项工作?

我无法将SELECT放入字符串中,并使用sp_executesql运行它,因为我将无法访问INSERTED表(这是在触发器中运行)。

+0

“@ ColumnName”返回的值和您的预期结果是什么? – 2013-02-25 13:49:25

+0

在上面的例子中,select返回的值是'AlarmID',因为INSERTED表中的AlarmID列是int,所以我期待int。 – Tim 2013-02-25 13:51:11

+0

也许你可以添加样本记录与所需的结果和*不相关* sql查询。 – 2013-02-25 13:51:11

EXEC('SELECT MIN(' + @ColumnName + ') FROM INSERTED') 

派生自the link smoore提供。

使用这个,如果你想最小的变量:

SELECT @columnName = MIN(@ColumnName) FROM YourTable 

你不能真正做到这一点。你最好的选择,这取决于@ColumnName的可能值的数量是动态设定一个case语句中的字段值,或者选择性地使用运行IF语句的正确查询:

SELECT CASE @ColumnName WHEN 'AlarmID' THEN MIN(AlarmID) WHEN 'AnotherField' THEN 
MIN(AnotherField) END AS MinimumValue FROM INSERTED 

OR

IF @ColumnName = 'AlarmID' 
    SELECT MIN(AlarmID) FROM INSERTED 
ELSE 
    ....