【发布时间】:2011-03-01 15:02:29
【问题描述】:
我有一个存储过程正在执行一些 ddl dml 操作。 它在处理来自 CTE 的数据和交叉应用等复杂的事情后检索数据。
现在这会返回一个 4 个表,这些表在前端绑定到各种源。 现在我想使用其中一张表进行进一步处理,以便从中获取更多有用的信息。
例如。该表将包含大约 2000 条记录,其中我想获取仅属于住宿的记录。
PK_CATEGORY_ID DESCRIPTION FK_CATEGORY_ID IMMEDIATE_PARENT Department_ID Department_Name DESCRIPTION_HIERARCHY DEPTH IS_ACTIVE ID_PATH DESC_PATH
-------------------- -------------------------------------------------- -------------------- -------------------------------------------------- -------------------- -------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 Food NULL NULL 1 Food (Food) Food 0 1 0 Food
5 Chinese 1 Food 1 Food (Food) ----Chinese 1 1 1 Food->Chinese
14 X 5 Chinese 1 Food (Food) --------X 2 1 1->5 Food->Chinese->X
15 Y 5 Chinese 1 Food (Food) --------Y 2 1 1->5 Food->Chinese->Y
65 asdasd 5 Chinese 1 Food (Food) --------asdasd 2 1 1->5 Food->Chinese->asdasd
66 asdas 5 Chinese 1 Food (Food) --------asdas 2 1 1->5 Food->Chinese->asdas
8 Italian 1 Food 1 Food (Food) ----Italian 1 1 1 Food->Italian
48 hfghfgh 1 Food 1 Food (Food) ----hfghfgh 1 1 1 Food->hfghfgh
55 Asd 1 Food 1 Food (Food) ----Asd 1 1 1 Food->Asd
2 Lodging NULL NULL 2 Lodging (Lodging) Lodging 0 1 0 Lodging
3 Room 2 Lodging 2 Lodging (Lodging) ----Room 1 1 2 Lodging->Room
4 Floor 3 Room 2 Lodging (Lodging) --------Floor 2 1 2->3 Lodging->Room->Floor
9 First 4 Floor 2 Lodging (Lodging) ------------First 3 1 2->3->4 Lodging->Room->Floor->First
10 Second 4 Floor 2 Lodging (Lodging) ------------Second 3 1 2->3->4 Lodging->Room->Floor->Second
11 Third 4 Floor 2 Lodging (Lodging) ------------Third 3 1 2->3->4 Lodging->Room->Floor->Third
29 Fourth 4 Floor 2 Lodging (Lodging) ------------Fourth 3 1 2->3->4 Lodging->Room->Floor->Fourth
12 Air Conditioned 3 Room 2 Lodging (Lodging) --------Air Conditioned 2 1 2->3 Lodging->Room->Air Conditioned
20 With Balcony 12 Air Conditioned 2 Lodging (Lodging) ------------With Balcony 3 1 2->3->12 Lodging->Room->Air Conditioned->With Balcony
24 Mountain View 20 With Balcony 2 Lodging (Lodging) ----------------Mountain View 4 1 2->3->12->20 Lodging->Room->Air Conditioned->With Balcony->Mountain View
25 Ocean View 20 With Balcony 2 Lodging (Lodging) ----------------Ocean View 4 1 2->3->12->20 Lodging->Room->Air Conditioned->With Balcony->Ocean View
26 Garden View 20 With Balcony 2 Lodging (Lodging) ----------------Garden View 4 1 2->3->12->20 Lodging->Room->Air Conditioned->With Balcony->Garden View
52 Smoking 20 With Balcony 2 Lodging (Lodging) ----------------Smoking 4 1 2->3->12->20 Lodging->Room->Air Conditioned->With Balcony->Smoking
21 Without Balcony 12 Air Conditioned 2 Lodging (Lodging) ------------Without Balcony 3 1 2->3->12 Lodging->Room->Air Conditioned->Without Balcony
13 Non Air Conditioned 3 Room 2 Lodging (Lodging) --------Non Air Conditioned 2 1 2->3 Lodging->Room->Non Air Conditioned
22 With Balcony 13 Non Air Conditioned 2 Lodging (Lodging) ------------With Balcony 3 1 2->3->13 Lodging->Room->Non Air Conditioned->With Balcony
71 EA 3 Room 2 Lodging (Lodging) --------EA 2 1 2->3 Lodging->Room->EA
50 Casabellas 2 Lodging 2 Lodging (Lodging) ----Casabellas 1 1 2 Lodging->Casabellas
51 North Beach 50 Casabellas 2 Lodging (Lodging) --------North Beach 2 1 2->50 Lodging->Casabellas->North Beach
40 Fooding NULL NULL 40 Fooding (Fooding) Fooding 0 1 0 Fooding
41 Pizza 40 Fooding 40 Fooding (Fooding) ----Pizza 1 1 40 Fooding->Pizza
45 Onion 41 Pizza 40 Fooding (Fooding) --------Onion 2 1 40->41 Fooding->Pizza->Onion
47 Extra Cheeze 41 Pizza 40 Fooding (Fooding) --------Extra Cheeze 2 1 40->41 Fooding->Pizza->Extra Cheeze
77 Burger 40 Fooding 40 Fooding (Fooding) ----Burger 1 1 40 Fooding->Burger
我使用一些包含一些 DML 操作的存储过程来获得这个结果。
我想要这样的东西
select description from exec spName where fk_category_id=5
请记住,这个 spName 正在返回 4 个表,我想对其中一个表执行一些查询,其中一个表的索引将为我所知。 在进一步查询之前,我不必将其发送到 UI。
我正在使用 Sql Server 2008,但也想要一个兼容 2005 的解决方案。
【问题讨论】:
-
我认为您不能为 SP 放置 select 语句。最好在 sp 中使用表值函数,并对函数返回的表进行额外的操作。
-
@Chinjoo:考虑到 spName 过程返回我的单个表,比如上面的表,请给我一个例子。
-
可以在以下行中完成: Create Proc spName ( @Parameter dataType ) AS Select * into #temptab from myFunction() 这里的函数是这样的: Create Function myFunction() returns @temp table(id INT) as begin insert @temp select * from your table return end
-
@Chinjoo:听说函数不支持dml操作。那怎么可能。据此,您提供的解决方案是不可能的。此外,“Insert @temp select * from your table”是我想要的,但这里的表是通过存储过程返回给我的。我现在没有桌子。
标签: sql sql-server database tsql stored-procedures