首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >TSQL:确定存储过程返回的列数

TSQL:确定存储过程返回的列数
EN

Stack Overflow用户
提问于 2012-07-23 18:53:20
回答 4查看 2.1K关注 0票数 3

这个问题以前可能有人问过,但我找不到一个令人满意的答案。

我需要将存储过程的结果插入到一个临时表中,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO #TEMP EXEC MY_SP

我事先不知道SP将返回多少列,因此我需要准备我的#TEMP表(通过dynamic ALTER ..添加命令)添加列以匹配SP结果集。

假设- SP不接受任何参数,并且列数始终相同。但是,我如何在SP之外的纯TSQL中确定这个数字,这样我就可以将它存储到变量中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-26 14:19:31

一个困难的问题,特别是当其他人拒绝你运行OPENROWSET的必要权限时。

您是否考虑过对SP进行解包/编写脚本,并将其内容直接添加到T-SQL中?通过这种方式,您可以随心所欲地修改和调整它。

否则,如果您可以解释有关SP的更多信息:

  • SP做什么?
  • 它输出什么类型的信息?1-N列,-多少行?
  • 是慢/快?(我们是否可以使用蛮力的try-catch方法)?
  • 它如何确定要输出的列,以及更改的频率?
  • 你能以任何方式预先确定列吗?(以便您可以使用INSERT #temp EXEC sp_getData语法)。

祝你好运!

票数 2
EN

Stack Overflow用户

发布于 2012-07-23 19:03:44

这有点尴尬,但你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * INTO #temp 
FROM OPENROWSET('SQLOLEDB','Data Source=MyServer;Trusted_Connection=yes;Integrated Security=SSPI', 'EXECUTE MyDB.MySchema.MyProcedure @MyParm=123')

我使用了requested EXECUTE INTO语法,比如SELECT INTO,以避免事先知道存储的proc输出的形状,但它被拒绝了

票数 2
EN

Stack Overflow用户

发布于 2012-07-28 20:48:21

让我从一开始就说,如果我必须这样做,我会尝试在SQL环境或其他环境之外找到一种方法,因为我提供的解决方案不是实现这一点的好方法,但它是有效的。所以我并不是说这是个好主意。我有一个名为test的sp:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE PROCEDURE Test
AS
SELECT 1 as One, 2 as Two

为了动态地执行此操作,我执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DECLARE @i int
SET @i = 1;
DECLARE @SUCESS bit 
SET @SUCESS = 0
WHILE(@SUCESS = 0)
BEGIN 
  DECLARE @proc VARCHAR(MAX)
  DECLARE @count int
  SET @count = 1
  SET @proc = 'DECLARE @t TABLE ( c1 varchar(max) '
  WHILE @count < @i 
  BEGIN 
    SET @proc = @proc + ', c' + CONVERT(varchar, @count + 1) + ' varchar(max) '
    print @proc 
    SET @count = @count + 1
  END
  SET @proc = @proc + '); INSERT INTO @t EXEC Test'
  BEGIN TRY
    EXEC(@proc);
    SET @SUCESS = 1
  END TRY
  BEGIN CATCH
    SET @i = @i+1
  END CATCH

END

SET @proc = @proc + '; SELECT * into ##t FROM @t '
EXEC( @proc )

SELECT * from ##t

对于您的问题,这是一个糟糕的解决方案,因为您已经丢失了列的数据类型、列的名称等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11618634

复制
相关文章
(三)回调 ref 中调用次数问题
# 🍇一、回调形式的 ref 的调用次数 class Demo { showInfo = () => { let {input} = this alert(input.value) } render() { return ( <div> <input ref={(currentNode) => this.input = currentNode; console.log('@',
老怪兽
2023/02/22
7100
(三)回调 ref 中调用次数问题
JS调用栈/回调队列/事件循环
单线程容易遇到一个问题:阻塞 解决办法:异步回调 解决原理:调用栈把会阻塞的函数丢到Web APIs里,Web APIs再把它丢到回调队列里, 通过事件循环——看着调用栈空了,就把回调队列里的函数丢回调用栈里让它执行
杨肆月
2019/08/20
4K0
JS调用栈/回调队列/事件循环
回调
回调简单而言:在一个类(A)的方法(a)中调用另一个类(B)的方法(b),当方法(b)执行完之后就调用类(A)中的方法(c),这就是回调的过程,是不是很简单?简单分析可以知道一个类(A)持有另一个类(B)的引用,方法(c)就叫做回调函数,画成UML图就如下所示:
晚上没宵夜
2020/03/10
2.6K0
​29 - 回调函数和回调地狱
原文地址:https://dev.to/bhagatparwinder/callback-functions-callback-hell-79n
前端黑板报
2022/12/01
4.6K0
什么是回调地狱?如何解决回调地狱问题_地狱回调
这个问题呢,需要从Node.js的API说起,这里就会有人问了?博主你不是说回调地狱的问题吗,怎么说到API了,别急,看博主一步一步的解释给你听:
全栈程序员站长
2022/11/15
3.2K0
JavaScript异步调用操作可增加finally回调
JavaScript异步调用操作(如远程服务、本地任务)的API一般只提供的执行成功(success)和执行失败(fail)的回调,其实还可以提供一个无论执行成功还是失败最终都会执行的回调(finally),使得一些扫尾工作不用在成功和失败的回调代码中都重复写一遍,流程更加清晰规整。
LeoXu
2018/08/15
5400
MessageHandler 高级用法二:原生调用JS 实现回调
在 上一篇中 我们实现了原生和JS 的方法调用,这篇解决一下在 APP 中调用JS方法时怎么含有 JS 的回调
onety码生
2018/11/21
4.1K0
为什么加了@Transactional注解,事务没有回滚?
在前天的《事务管理入门》一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有回滚。经过一顿沟通排查之后,找到了原因,在此记录一下,给后面如果碰到类似问题的童鞋一个参考。
程序猿DD
2020/07/16
9350
七、回调
修改PspNotifyEnableMask为00000009,创建和退出进程时就不会触发回调
zhang_derek
2022/09/29
1.6K0
关于回调
爱学习的前端歌谣
2023/10/18
1760
关于回调
回调函数
什么是回调函数,上面的问题说的是不是很空洞,不是太形象,下面是知乎上的一位网友给的答案:
LiosWong
2018/10/29
3.8K0
回调函数
  有点类似模板的功能,可以使用函数指针作为参数,当调用函数时,使用void *进行传递参数,细致比较时,再用int *之类的进行强制转换。回调函数,其实就是在参数中定义函数,调用时,回到主函数去调用这个函数。仔细用法如下: 首先定义查找函数 Node * search_list(Node *node, void const *value, int (*compare)(void const *,void const *)){ while(node!=NULL){ if(compar
用户1154259
2018/01/17
3.3K0
回调函数
回调地狱
一个函数,作为参数的形式传给另一个函数调用,那么这个这个函数就叫做回调函数。 当然回调函数很常见,如下
用户4793865
2023/01/12
1.4K0
回调地狱
前言 从前一文中你真的了解回调?我们已知道回调函数是必须得依赖另一个函数执行调用,它是异步执行的,也就是需要时间等待,典型的例子就是Ajax应用,比如http请求,在不刷新浏览器的情况下,当你执行DO
itclanCoder
2020/10/28
2.3K0
回调地狱
回调函数
原文链接:https://note.noxussj.top/?source=cloudtencent 什么是回调函数? 简单的来说,一个函数作为另外一个函数的参数,可以称为回调函数。这个理解其实不完全
菜园前端
2023/05/20
1.7K0
jQuery的回调模块 -- 为什么放弃使用Cache
jQuery1.7之后加入了回调模块 -- jQuery.Callbacks()。
用户7293182
2022/01/17
6370
使用委托实现同步回调与异步回调
使用委托可以执行的一项有用操作是实现回调。回调是传入函数的方法,在函数结束执行时调用该方法。 例如,有一个执行一系列数学操作的函数。在调用该函数时,也向其传递一个回调方法,从而在函数完成其计算工作时,调用回调方法,向用户通知计算结果。 同步回调    首先声明两个方法: AddTwoNumbers():接受两个整型实参以及一个类型委托 ResultCallback():接受一个字符串,并显示出来。代码如下: using System; using System.Collections.Generic
hbbliyong
2018/03/05
3K0
使用委托实现同步回调与异步回调
源码分析Dubbo异步调用与事件回调机制
在Dubbo中,引入特定的过滤器FutureFilter来处理异步调用相关的逻辑,其定义如下:
丁威
2019/06/10
2.3K0
源码分析Dubbo异步调用与事件回调机制
Fragment回调Activity
如果你需要在fragment中处理一些事情,事情的处理结果或者你需要告 诉activity马上要做什么事,这时候就需要和activity进行通讯。包括很多fragment在viewpager中的情况,而且可以保证activity能即时进行响应。相比发送广播,性能更好,代码更少。
坑吭吭
2018/08/31
1.8K0
回调函数案例
内置数据类型: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> //回调函数---通用数组型打印案例 //参数1:数组首地址 参数2:数组中每个元素的大小 参数3:数组元素个数 参数4:回调函数对数组内容进行输出 void printArray(void* array, int size, int len, void(*MyPrint)(void *)) { //void*没有数组的概念,因此如果想通用可以用char*,如果用int*的话,打印字符串
大忽悠爱学习
2021/03/04
3.9K0

相似问题

未收到来自BeginGetResponse的回调

20

从HttpWebRequest.BeginGetResponse回调中获取数据

43

为什么这个AJAX回调没有被调用?

22

没有调用“数据”事件的回调,为什么?

11

Windows phone 8开发人员:从未调用过HttpWebRequest.BeginGetResponse回调

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文