0

从一个简单的查询开始……</p>

SELECT UserID AS ‘User ID’, UserName AS ‘User Name’ FROM tblUsers

OUTPUT:
User ID User Name
1   Joe
2   Bob
3   Larry

但随后我需要运行以用户 ID 作为输入的存储过程:

GetUsersLastTransaction(pID_User) 

谁的 SQL 可以是任何东西 ( SELECT <whatever> WHERE <whatever> = UserID)

GetUsersAccountBalance(pID_User)

再次,谁的 SQL 可以是任何东西 ( SELECT <whatever> WHERE <whatever> = UserID)

那么我怎样才能进行查询,给我一个像这样的数据表

OUTPUT:
User ID User Name   Last Transaction    Account Balance
1   Joe     Transaction xyz     1000
2   Bob     Transaction pdq     1500
3   Larry       Transaction abc     1110

​​​

SELECT UserID AS ‘User ID’, UserName AS ‘User Name’, (
    SELECT <whatever>  
    WHERE <whatever> = ????
) AS ‘Last Transaction’, (
    SELECT <whatever>  
    WHERE <whatever> = ????
) AS ‘Account Balance’

那么,如何使用子查询的 where 子句 (????) 中第一列(“用户 ID”)中的值,并使其适用于每一行?

4

2 回答 2

0

这对你来说不会很好。您要做的是逐行执行您的存储过程。这意味着对于结果集中的 N ROWS,您将执行存储的过程 N 次。与只执行一次的基于集合的方法(如下所述)相反。

什么会更有效(但它不会有太多的代码重用)是将您的 select 语句结果放入临时表中。然后复制存储过程的逻辑并在临时表上进行连接。

于 2013-09-19T14:42:53.223 回答
0

只需限定子查询中的字段名称。考虑这个查询:

SELECT UserID AS ‘User ID’, UserName AS ‘User Name’,
    (SELECT <whatever> FROM tbl2 WHERE tbl2.field = tblUsers.UserID)
FROM tblUsers

现在,如果您尝试在查询中执行这些存储过程 - 那将不会发生。您需要将这些过程转换为标量值的用户定义函数。此时,您实际上可以调用该函数来代替子查询。但是,除非由于子查询的复杂性而绝对必要,否则我不建议这样做。

于 2013-09-19T14:43:42.390 回答