gpt4 book ai didi

sql - SQL Server View 中的位置和顶部交互

转载 作者:行者123 更新时间:2023-12-05 00:15:17 26 4
gpt4 key购买 nike

你知道如何说服 SQL Server 在 View 中考虑 WHERE 子句吗?
看起来 SQL Server 只运行我的 View ,评估 TOP 1,然后应用“where id=N”子句来过滤 View 的结果集。
例子:

create table mytable ( id int, name varchar(64) );

insert into mytable values ( 5, 'BOB' );
insert into mytable values ( 5, 'ROBERT' );
insert into mytable values ( 5, 'SMITH, ROBERT' );
insert into mytable values ( 8, 'A.J.' );
insert into mytable values ( 8, 'Al J.' );
insert into mytable values ( 8, 'Albert Johnston' );

select * from mytable;

+----+-----------------+
: id : name :
+----+-----------------+
: 5 : BOB :
: 5 : ROBERT :
: 5 : SMITH, ROBERT :
: 8 : A.J. :
: 8 : Al J. :
: 8 : Albert Johnston :
+----+-----------------+

create view myview as
select top 1 id, name
from mytable
order by len(name) desc

问题:
-- bad, empty result set
-- (I want this to answer 5, 'SMITH, ROBERT')
select * from myview where id = 5

这些按预期工作:
-- good, answers 8, 'Albert Johnston'
select * from myview

-- good, also answers 8, 'Albert Johnston'
select * from myview where id = 8

现在没有 View :
-- good, answers 5, 'SMITH, ROBERT'
select top 1 id, name
from mytable
where id = 5
order by len(name) desc

最佳答案

在这种情况下,如果你想创建这样的东西,我建议使用一个使用 where 返回一个值的东西,所以最好创建一个 Table-Valued User-Defined Function

Create dbo.YourFunction
(
@parameter id
)
returns table
as
return select top 1 id, name
from mytable
where id = @parameter
order by len(name) desc

并像使用它一样
select * from dbo.yourFunction(5)

关于sql - SQL Server View 中的位置和顶部交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com