zoukankan      html  css  js  c++  java
  • SQL Server 根据存储过程的结果集创建临时表

       最近见很多人问到如何根据一个存储过程的结果集创建临时表,如果存储过程的结果集字段固定则可以事先建好再写入数据,但如果结果集不固定就无法事先建了,下面来测试下如何根据不定字段结果集创建临时表。

    SELECT * INTO #temp_table FROM OPENDATASOURCE('SQLOLEDB','Data Source=.;User ID=sa;Password=sa2014').'test.dbo.sp_t 2'
    
    
    SELECT * INTO #temp_table  FROM  OPENROWSET('SQLNCLI', 'Server=.;Trusted_Connection=yes;','EXEC test.dbo.sp_t 2') temp

    如果执行报,"链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI11" 返回了消息 "登录超时已过期",错误。在配置管理器中开启实例的TCPIP协议即可。

    但对于有参数的存储过程怎么处理呢?OPENDATASOURCE和OPENROWSET都不支持传参,目前我所能想到的方法是使用动态SQL(如有其它方法的可以告诉我一下哈),示例如下。

    DECLARE @a VARCHAR(2)='2';
    DECLARE @str VARCHAR(100)='EXEC test.dbo.sp_t '+@a,@s NVARCHAR(max);
    SET @s= 'SELECT a.* INTO #tt  FROM  OPENROWSET(''SQLNCLI'', ''Server=.;Trusted_Connection=yes;'','''+@str+''') temp';
    
    EXEC(@s);
  • 相关阅读:
    57. Insert Interval
    287. Find the Duplicate Number
    52. N-Queens II
    51. N-Queens
    151. Reverse Words in a String
    29. Divide Two Integers
    [POJ2104]K-th Number
    [JSOI2008]最大数
    [BZOJ3673&3674]可持久化并查集&加强版
    C++ STL rope介绍----可持久化平衡树
  • 原文地址:https://www.cnblogs.com/VicLiu/p/12599312.html
Copyright © 2011-2022 走看看