把存储过程结果集SELECT INTO到临时表
把存储过程结果集SELECT INTO到临时表 在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种。 一. SELECT INTO
. 使用select into会自动生成临时表,不需要事先创建 select * into #temp from sysobjects
select * from #temp . 如果当前会话中,已存在同名的临时表 select * into #temp from sysobjects 再次运行,则会报错提示:数据库中已存在名为 '%1!' 的对象。
Msg , Level , State , Line
There is already an object named '#temp' in the database. 在使用select into前,可以先做一下判断: if OBJECT_ID('tempdb..#temp') is not null
drop table #temp select * into #temp from sysobjects
select * from #temp . 利用select into生成一个空表
如果要生成一个空的表结构,不包含任何数据,可以给定一个恒不等式如下: select * into #temp from sysobjects where =
select * from #temp 二. INSERT INTO
. 使用insert into,需要先手动创建临时表 1.1 保存从select语句中返回的结果集 create table test_getdate(c1 datetime) insert into test_getdate select GETDATE() select * from test_getdate 1.2 保存从存储过程返回的结果集 create table #helpuser
(
UserName nvarchar(),
RoleName nvarchar(),
LoginName nvarchar(),
DefDBName nvarchar(),
DefSchemaName nvarchar(),
UserID smallint,
SID smallint
) insert into #helpuser exec sp_helpuser select * from #helpuser 1.3 保存从动态语句返回的结果集 create table test_dbcc
(
TraceFlag varchar(),
Status tinyint,
Global tinyint,
Session tinyint
) insert into test_dbcc exec('DBCC TRACESTATUS') select * from test_dbcc 对于动态SQL,或者类似DBCC这种非常规的SQL语句,都可以通过这种方式来保存结果集。 . 不能嵌套使用insert exec语句 2.1 下面这个例子,尝试保存sp_help_job的结果集到临时表,发生错误 create table #JobInfo
(
job_id uniqueidentifier,
originating_server nvarchar(),
name nvarchar(),
enabled tinyint,
description nvarchar(),
start_step_id int,
category nvarchar(),
owner nvarchar(),
notify_level_eventlog int,
notify_level_email int,
notify_level_netsend int,
notify_level_page int ,
notify_email_operator nvarchar(),
notify_netsend_operator nvarchar(),
notify_page_operator nvarchar(),
delete_level int,
date_created datetime,
date_modified datetime,
version_number int,
last_run_date int,
last_run_time int,
last_run_outcome int,
next_run_date int,
next_run_time int,
next_run_schedule_id int,
current_execution_status int,
current_execution_step nvarchar(),
current_retry_attempt int,
has_step int,
has_schedule int,
has_target int,
type int
) insert into #JobInfo exec msdb..sp_help_job 返回错误信息:INSERT EXEC 语句不能嵌套。
Msg , Level , State , Procedure sp_get_composite_job_info, Line
An INSERT EXEC statement cannot be nested. 展开错误信息中的存储过程: exec sp_helptext sp_get_composite_job_info 发现里面还有个INSERT INTO…EXEC的嵌套调用,SQL Server在语法上不支持。 INSERT INTO @xp_results
EXECUTE master.dbo.xp_sqlagent_enum_jobs @can_see_all_running_jobs, @job_owner, @job_id 2.2 可以用分布式查询来避免这个问题,这种写法在INSIDE SQL Server 2005中作者提到过
() 首先到打开服务器选项Ad Hoc Distributed Queries exec sp_configure 'show advanced options',
RECONFIGURE
GO
exec sp_configure 'Ad Hoc Distributed Queries',
RECONFIGURE
GO () 通过OPENROWSET连接到本机,运行存储过程,取得结果集
使用windows认证 select * into #JobInfo_S1
from openrowset('sqloledb', 'server=(local);trusted_connection=yes','exec msdb.dbo.sp_help_job') select * from #JobInfo_S1 使用SQL Server认证 SELECT * INTO #JobInfo_S2
FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'sa_password','exec msdb.dbo.sp_help_job') SELECT * FROM #JobInfo_S2 这样的写法,既免去了手动建表的麻烦,也可以避免insert exec 无法嵌套的问题。几乎所有SQL语句都可以使用。 --dbcc不能直接运行
SELECT a.* into #t
FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'sa_password',
'dbcc log(''master'',3)') AS a --可以变通一下
SELECT a.* into #t
FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'sa_password',
'exec(''DBCC LOG(''''master'''',3)'')') AS a
把存储过程结果集SELECT INTO到临时表的更多相关文章
- 转:把存储过程结果集SELECT INTO到临时表
把存储过程结果集SELECT INTO到临时表 在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种. 一. SELECT INTO 1. 使用select into会自动生成临 ...
- 01. 把存储过程结果集SELECT INTO到临时表
在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种. 一. SELECT INTO 1. 使用select into会自动生成临时表,不需要事先创建 select * into #tem ...
- SELECT INTO创建临时表
SELECT INTO创建临时表 SQL Server临时表有两种类型:本地和全局.它们在名称.可见性以及可用性上有区别.本地临时表的名称以单个数字符号 (#) 打头:它们仅对当前的用户连接是可见的: ...
- oracle数据库存储过程中的select语句的位置
导读:在oracle数据库存储过程中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句. 先看下这个存储过 ...
- 存储过程中使用select……into
在MySQL存储过程中使用SELECT -INTO语句为变量赋值: 用来将查询返回的一行的各个列值保存到局部变量中. 要求: 查询的结果集中只能有1行. SELECT col_name[,...] I ...
- 【转载】Sqlserver存储过程中使用Select和Set给变量赋值
Sqlserver存储过程是时常使用到的一个数据库对象,在存储过程中会使用到Declare来定义存储过程变量,定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,使用Set对存 ...
- 把存储过程SELECT INTO到临时表
在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种. 一. SELECT INTO1. 使用select into会自动生成临时表,不需要事先创建12 select * into #te ...
- T-SQL应用,视图、存储过程、触发器、游标、临时表等
sqlserver常用操作: 视图.存储过程.触发器.函数 --*********************批处理********************* --[在一个批处理中存有一个语法错误,则所有 ...
- mysql 存储过程中使用游标中使用临时表可以替代数组效果
mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在 ...
随机推荐
- django----Form实时更新两种方式
在ModelForm需要知道: from app03 import models from django.forms import ModelForm class UserForm(ModelForm ...
- jmeter 控制线程组执行顺序
这个要配合全局变量.if和while来实现BeanShell取样器,全局变量:${__setProperty(newswitch,${switch1},)}if条件:"${__P(newsw ...
- ORA-27157 ORA-27300 ORA-27301
目录: 问题现象 原因分析 解决方案 问题现象: 收到同事反馈,数据库无法连接.于是登录服务器发现,数据库莫名挂掉.实例crash,日志中记录截取一段如下: Errors in file /u01/a ...
- 常见的爬虫分析库(3)-Python正则表达式与re模块
在线正则表达式测试 http://tool.oschina.net/regex/ 常见匹配模式 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\ ...
- tensorflow:验证码的识别(下)
上两篇详细的说明了验证码的识别,不过我们采用的是方法二,下面采用方法一.注意和方法二的区别. 验证码识别方法一: 把标签转为向量,向量长度为40.(4位数字验证码) 验证码的生成和tf.record的 ...
- 磁盘修改AF
请严格按照如下流程: 1 以管理员打开 硬盘安装助手 2 选择苹果Mac系统镜像 (cdr格式的) 3 直接选择要写入的盘,不要点击右边的方框中的勾选 (此时就可以写入了,虽然最后还是显示 Chang ...
- |ERROR|ERROR: missing data for column "createtime" (seg3 slice1 192.168.66.23:40001 pid=33370)之mysql换行符或者空格引起的问题
1.最近的kettle的数据交换配置,启动kettle引起的错误,如下所示: |ERROR|ERROR: missing data pid=) 引发这个错误,并不是这个字段引起的错误,一般是这个字段临 ...
- nginx 日志 cron任务切割日志
#vim cut_nginx_log.sh #cd /usr/local/nginx/logs/ #/bin/mv access.log access_$(date +%F).log #/usr/lo ...
- 【Android】Android 监听apk安装替换卸载广播
[Android]Android 监听apk安装替换卸载广播 首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDE ...
- 设置sde表空间为自动增长
有的用户在测试数据时,希望在SDE表空间里面不受限制地导入数据,于是需要将SDE的表空间设置为自动增长. 过程描述 1.可以在创建sde表空间的时候,添加参数Autoextend on,修改后创建命令 ...