如何将存储过程中的数据获取到临时表中?
我正在使用 sybase ASE 15。寻找类似的内容
Select * into #tmp exec my_stp;
my_stp 返回 10 个数据行,每行两列。
Am working on sybase ASE 15. Looking for something like this
Select * into #tmp exec my_stp;
my_stp returns 10 data rows with two columns in each row.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在 ASE 15 中,我相信您可以使用函数,但它们对多行数据集没有帮助。
如果您的存储过程使用“从某处选择 col1,col2”返回数据,则无法获取该数据,它只会流回客户端。
您可以做的是将数据直接插入临时表中。 这可能有点棘手,就像您在存储过程中创建临时表一样,一旦存储过程完成运行,它就会被删除,并且您看不到内容。 这样做的技巧是在存储过程之外创建临时表,但从存储过程中引用它。 这里的难点是,每次重新创建存储过程时,您都必须创建临时表,否则您将收到“找不到表”错误。
运行代码:
In ASE 15 I believe you can use functions, but they're not going to help with multirow datasets.
If your stored proc is returning data with a "select col1,col2 from somewhere" then there's no way of grabbing that data, it just flows back to the client.
What you can do is insert the data directly into the temp table. This can be a little tricky as if you create the temp table within the sproc it is deleted once the sproc finishes running and you don't get to see the contents. The trick for this is to create the temp table outside of the sproc, but to reference it from the sproc. The hard bit here is that every time you recreate the sproc you must create the temp table, or you'll get "table not found" errors.
The to run the code:
我刚刚遇到了这个问题,迟到总比不到好……
这是可行的,但是屁股上巨大的痛苦,涉及 Sybase“代理表" 代表另一个本地或远程对象(表、过程, 看法)。 以下内容在 12.5 中有效,希望较新的版本有更好的方法。
假设您有一个存储过程定义为:
首先切换到 tempdb:
然后创建一个代理表,其中的列与结果集匹配:
注意点:
本地主机,但你可以替换
它适用于在以下位置注册的任何服务器
服务器的 sysservers 表。
然后,您可以从您自己的数据库中的表中进行选择:
这很简单。 要插入临时表,请先创建它:
然后组合:
I've just faced this problem, and better late than never...
It's doable, but a monstrous pain in the butt, involving a Sybase "proxy table" which is a standin for another local or remote object (table, procedure, view). The following works in 12.5, newer versions hopefully have a better way of doing it.
Let's say you have a stored proc defined as:
First switch to the tempdb:
Then create a proxy table where the columns match the result set:
Points of note:
of localhost, but you can substitute
it for any server registered in the
server's sysservers table.
You can then select from the table like this from your own db:
Which is straightforward enough. To then insert into a temporary table, create it first:
and combine:
当我寻找将 sys proc (sp_spaceused) 的结果集保存在持久表中的解决方案时,我发现了这个问题。
您可以让存储过程将结果写入临时表。 (就像 sp_spaceused 一样。)
这里的答案确实有助于找到我的解决方案。
我使用 sp_helptext & 从 sys procs 创建了自己的存储过程。 复制+粘贴。
然后我让 my_spaceused 将结果集保存到持久表中。
之后,我将持久结果表中的数据写入名称上与测量表相关的表中,因为每次运行存储过程时,结果表都会被重写。
I found this question, when I was searching for a solution to save the result set of a sys proc (sp_spaceused) in a persistent table.
You can let the stored proc just let the result write into a temp table. (Just like sp_spaceused does.)
The answers here really helped finding my solution.
I created my own stored procs out of the sys procs using sp_helptext & copy+paste.
Then I made my_spaceused saving the result set into a persistent table.
Afterwards I wrote the data from the persitent result table into a table relating to the masured table in name, because everytime, I run the stored proc, the result table will be rewritten.
不确定 Sybase,但在 SQL Server 中,以下操作应该有效:
INSERT INTO #tmp (col1,col2,col3...) exec my_stp
Not sure about Sybase, but in SQL Server the following should work:
INSERT INTO #tmp (col1,col2,col3...) exec my_stp
如果 my_stp 通过计算不同表中的值来填充数据,您可以创建一个与 my_stp 完全相同的等效视图。
If my_stp is populating data by computing values from different tables, you can create an equivalent view which does exactly the same as my_stp.