我在表单上有两个下拉菜单。第二个下拉列表根据第一个下拉列表中选择的值填充。两个存储过程查询之一我基本上显示的数据,其中@LocID的值不匹配在第一个下拉列表中不存在,并且还执行子查询,其中没有返回与声明的@LocID匹配的任何内容的zipcodes。
DECLARE @LocID INT;
SELECT
DISTINCT l.[ZipCode],
[Description] = l.ZipCode + ' - ' + l.Description
FROM LocMap l
WHERE l.ZipCode NOT IN (
SELECT l2.ZipCode
FROM LocMap l2
WHERE l2.LocID = @LocID
);
表名为LocMap。
LocID | ZipCode | Description
----------------------------------
100 | 91012 | Magical Sky
100 | 91013 | Dream Land
101 | 91012 | Blue Ocean
102 | 91012 | Gray Screen
104 | 91014 | Limit Break
108 | 91016 | Magic Hammer
我的问题是我的第二个存储过程,它也将数据返回到标记为最近添加的第二个下拉列表。它基本上查询一个表并返回它的所有数据(ZipCode +描述),没有标准或任何东西。我想知道的是,是否有可能在同一台服务器上查询两个数据库,如果是这样,我将如何对上面的存储过程执行相同的数据过滤以及第二个表的存储过程查询。第一个存储过程具有@declare LocID,但是第二个存储过程所做的只是返回所有内容而不声明任何内容。
1)建议的方法是什么。是否可以从第一个存储过程获取结果并执行类似于使用RecentAdded筛选出我的数据的子查询?就像第一个查询一样,我也不想返回任何与第二个表结果上传递的LocID相匹配的zipcode。
名为RecentAdded
的第二个存储过程表ZipCode | Description
----------------------------------
91018 | Zelda
91019 | Sephiroth
91012 | Cloud
91012 | Aeris
91011 | Tifa
91010 | Barrett
Dropdown Layout Example
[Select LocID] (First Dropdown)
100
104
108
120
[Select ZipCode - Description] (Second Dropdown]
---Recently Added---
91010 - Barrett
91018 - Zelda
......................
......................
......................
---All other ZipCodes---
91016 - Magic Hammer
91014 - Limit Break
......................
......................
......................
答案 0 :(得分:1)
您可以使用UNION运算符一次性执行此操作:
DECLARE @LocID INT;
SELECT DISTINCT
f.[ZipCode],
[Description] = f.ZipCode + ' - ' + f.Description,
f.[RecentlyAdded]
FROM (
SELECT
l.[ZipCode],
l.[Description],
RecentlyAdded = CAST(0 AS BIT)
FROM LocMap l
UNION
SELECT
r.[ZipCode],
r.[Description],
RecentlyAdded = CAST(1 AS BIT)
FROM RecentlyAdded r
) f
WHERE f.ZipCode NOT IN (
SELECT l2.ZipCode
FROM LocMap l2
WHERE l2.LocID = @LocID
)
ORDER BY RecentlyAdded DESC;
从两个表中获取输入后,您可以将结果存储为自己的“表”,并进行过滤/选择,就像您只查询一个表一样。
确保正确更改上面的RecentAdded的数据库/模式名称(在帖子中没有看到)。
答案 1 :(得分:0)
使用临时表存储中间值,如下所示。根据具体情况,真正的夯实表(如图所示)或表值变量可能是合适的。
create table #t(
ZipCode varchar(7)
,Description varchar(255)
);
-- N.B. Don't insert a **go** here
insert #t (ZipCode,Description)
exec <second stored procedure name and parameters>;
-- proceed to join to your prior query