Sql 从存储过程中选择列?
我有一个存储的进程,我正在尝试从中选择所有行Sql 从存储过程中选择列?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个存储的进程,我正在尝试从中选择所有行 SELECT * FROM dbo.SEL_My_Func 'arg1','arg2','ar3' 没用。所以我也试着: SELECT * FROM EXEC dbo.SEL_My_Func 'arg1','arg2','ar3' 但这也不起作用。如何测试存储的proc返回的结果是否正确 我不得不使用proc,而不是函数,因为我有一个ORDER BY作为SQL的一部分,请参见: 最后,我认为限制从存储的probc返回哪些列没有问题,您只是不能指定
SELECT * FROM dbo.SEL_My_Func 'arg1','arg2','ar3'
没用。所以我也试着:
SELECT * FROM EXEC dbo.SEL_My_Func 'arg1','arg2','ar3'
但这也不起作用。如何测试存储的proc返回的结果是否正确
我不得不使用proc,而不是函数,因为我有一个ORDER BY作为SQL的一部分,请参见:
最后,我认为限制从存储的probc返回哪些列没有问题,您只是不能指定哪些行(否则您最好使用SQL函数)?您使用的解决方案将不起作用: 有变通办法
SELECT a.[1], a.[2]
FROM OPENROWSET('SQLOLEDB','myserver';'sa';'mysapass',
'exec mydatabase.dbo.sp_onetwothree') AS a
或者将任务分成两个查询
Declare @tablevar table(col1,..
insert into @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar
您正在使用的解决方案将不起作用: 有变通办法
SELECT a.[1], a.[2]
FROM OPENROWSET('SQLOLEDB','myserver';'sa';'mysapass',
'exec mydatabase.dbo.sp_onetwothree') AS a
或者将任务分成两个查询
Declare @tablevar table(col1,..
insert into @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar
你对函数的假设是错误的。您可以使用分区函数来选择组中的第一行 以下是查找每个客户的第一个经销商id的示例:
select client, dealer_id
from (
select client, dealer_guid
, RANK() over ( partition by client order by dealer_id) as rnk
from Dealers
) cd where rnk = 1
这也可以通过函数调用和表(我的示例)来实现。您对函数的假设是不正确的。您可以使用分区函数来选择组中的第一行 以下是查找每个客户的第一个经销商id的示例:
select client, dealer_id
from (
select client, dealer_guid
, RANK() over ( partition by client order by dealer_id) as rnk
from Dealers
) cd where rnk = 1
这也可以通过函数调用和表(我的示例)来完成。谢谢。这是否意味着我不能只选择要返回的proc列的子集?请参阅Romil的解决方案,或者谢谢。这是否意味着我不能只选择要返回的proc列的子集?请参阅Romil的解决方案,或者您不能在另一个语句中组合存储proc的输出-您不能限制生成哪些列和行-除非将整个输出转储到临时表中,然后
SELECT
ing从那里开始-但是你需要将ORDER BY
应用到SELECT
你不能在另一个语句中组合存储过程的输出-你不能限制生成哪些列和行-除非将整个输出转储到临时表中,然后从那里选择
ing-但是你需要将ORDER BY
应用于选择
但是,OP将其代码放在存储过程中的全部原因是,他们可以指定ORDER BY
。第二个显然不能保证在最终输出中尊重存储过程返回的行的顺序。“我认为第一个也不是。”达米恩,订单不是正常意义上的。存储的过程返回一组未排序的结果。然而,这些结果已经在一个列中被排序了(可能你最好看到我在顶部包含的链接)@Damien_不信者,OP可以使用order by子句和我在帖子中展示的方法。然而,OP将代码放在存储过程中的全部原因是,他们可以通过指定顺序。第二个显然不能保证在最终输出中尊重存储过程返回的行的顺序。“我认为第一个也不是。”达米恩,订单不是正常意义上的。存储的过程返回一组未排序的结果。然而,这些结果已经在一个列上被排序了,该列被分组为@Damien_the_unsiever,OP可以使用order by子句和我在帖子中展示的方法。