Sql server 简单选择时,T-SQL存储过程的性质是什么

Sql server 简单选择时,T-SQL存储过程的性质是什么,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我不理解存储过程中t-SQL select语句的本质。我来自甲骨文方面,这里对我来说定义明确 希望这个样本显示我的误解 我有一个存储过程: create procedure demo_1 as begin select count(1) from sys.tables; end; 现在我可以通过ManagementStudio执行这个过程 exec demo_1 我会在management studio中获得一个不错的结果。这看起来和电脑前的人一样,但是当我通过第二个存储过程调用这个

我不理解存储过程中t-SQL select语句的本质。我来自甲骨文方面,这里对我来说定义明确

希望这个样本显示我的误解

我有一个存储过程:

create procedure demo_1
as
begin
    select count(1) from sys.tables;
end;
现在我可以通过ManagementStudio执行这个过程

exec demo_1
我会在management studio中获得一个不错的结果。这看起来和电脑前的人一样,但是当我通过第二个存储过程调用这个存储过程时,我不能对这个结果做任何事情

我不明白这背后的意思。将未定义的结果打印到控制台,而不可能在TSQL世界中工作


其背景是:我需要一个调用内部
spfkeys
过程的存储过程。经过几个小时的研究,我没有找到一种直接的方法来从
sp_fkeys
获取信息,并在TSQL中处理结果。

如果要在另一个进程中使用存储的进程的结果集,请创建一个临时表,该表中的列与调用进程中返回的列相同。然后执行如下插入操作:

insert #test
exec myproc

但是,在执行此操作之前,必须创建临时tbl。如果我理解正确的话,这个温度tbl的COL必须看起来像结果。这里temp结构和proc的结果之间没有收缩。在我的特殊情况下:当我只想使用
sp_fkeys
proc中的一个col时,我必须创建一个带有多个col的temp tbl,以便只获得一个cole。此外,当ms在sql server的新版本中发生更改时,内部sql的COL代码将不起作用。我不理解不存在的压缩是的,你必须在temp表中有它返回的所有列。然后,您可以从temp表中选择稍后需要的内容。您可以使用OpenQuery来避免了解模式。我们已经看到了openquery解决方案。我认为这是一个黑客,没有好的简单的解决方案。您必须从sql server外部获取值。这就是我不明白的。sql server提供的过程(开箱即用)不是!可使用与编写过程相同的语言使用。我不明白这是什么性质,为什么要这样做。当有一个函数用于此时,我理解它。视图也是完美的(就像oracle一样)。但是为什么proc没有输出?@oas_public、Oracle和sqlserver的做法不同。有些东西比Oracle做得更好,有些东西比SQL Server做得更好,有些东西只是不同,两者都不比另一个好。你需要接受这一点。我们告诉过您如何获取所需的信息,现在您只需实现您的解决方案,但不要抱怨您不喜欢SQLServer的工作方式。