2

我意识到这可能是一个非常新手的问题,我完全错过了一些东西,但我想测试一下使用MIN字符串(在 MSSQL 中):

MIN('d3d742ce-f12e-4402-9a0e-8a05066f6bed',
'03f8d7a7-9feb-4375-b7ff-04c187d46009',
'1c180a55-ce67-4ab4-afe5-9d9907ed1c21' )

但它告诉我:

消息 174,级别 15,状态 1,第 5 行 MIN 函数需要 1 个参数。

现在这对我来说很有意义,但如果可能的话,我想做类似的事情。

有没有办法在不使用特定表的情况下做这样的事情?

4

3 回答 3

4

只使用表变量怎么样

DECLARE @TABLE Table (str varchar(100))
INSERT @TABLE (str) VALUES ('d3d742ce-f12e-4402-9a0e-8a05066f6bed')
INSERT @TABLE (str) VALUES ('03f8d7a7-9feb-4375-b7ff-04c187d46009')
INSERT @TABLE (str) VALUES ('1c180a55-ce67-4ab4-afe5-9d9907ed1c21')

SELECT MIN(str) FROM @TABLE
于 2012-07-31T19:28:09.513 回答
2

您始终可以使用联合动态创建自己的派生表:

select min(MyCol)
from (
    select 'd3d742ce-f12e-4402-9a0e-8a05066f6bed' as MyCol
    union all select '03f8d7a7-9feb-4375-b7ff-04c187d46009'
    union all select '1c180a55-ce67-4ab4-afe5-9d9907ed1c21'
) as MyDerivedTable

union all在这种情况下使用,因为当您知道您的测试数据都是唯一的(它不会隐含地像union.

相同的技术可用于公用表表达式 (CTE)

;with CTE as (
    select 'd3d742ce-f12e-4402-9a0e-8a05066f6bed' as MyCol
    union all select '03f8d7a7-9feb-4375-b7ff-04c187d46009'
    union all select '1c180a55-ce67-4ab4-afe5-9d9907ed1c21'
)
select min(MyCol)
from CTE

我用分号开始语句,因为如果你没有用分号终止前一个语句,SQL Server 会抱怨。

但是,这只能在一定程度上起作用,因为在不得不求助于变通方法之前,您只能在查询中使用 256 个表。

于 2012-07-31T19:36:23.747 回答
2

就是这样:(从 SQL Server 2008 开始工作)

SELECT min(id) 
FROM (
VALUES 
('d3d742ce-f12e-4402-9a0e-8a05066f6bed'),
('03f8d7a7-9feb-4375-b7ff-04c187d46009'),
('1c180a55-ce67-4ab4-afe5-9d9907ed1c21')) AS guids(id)
于 2012-07-31T19:43:06.683 回答