龙岗建设网站做网站运用的软件
龙岗建设网站,做网站运用的软件,成都网站建设木子网络,视频制作公司排行原文:01. 把存储过程结果集SELECT INTO到临时表在开发过程中#xff0c;很多时候要把结果集存放到临时表中#xff0c;常用的方法有两种。 一. SELECT INTO 1. 使用select into会自动生成临时表#xff0c;不需要事先创建 select * into #temp from sysobjects
select * fro…原文:01. 把存储过程结果集SELECT INTO到临时表在开发过程中很多时候要把结果集存放到临时表中常用的方法有两种。 一. SELECT INTO 1. 使用select into会自动生成临时表不需要事先创建 select * into #temp from sysobjects
select * from #temp 2. 如果当前会话中已存在同名的临时表 select * into #temp from sysobjects 再次运行则会报错提示数据库中已存在名为 %1! 的对象。Msg 2714, Level 16, State 6, Line 2There is already an object named #temp in the database. 在使用select into前可以先做一下判断 if OBJECT_ID(tempdb..#temp) is not null
drop table #tempselect * into #temp from sysobjects
select * from #temp 3. 利用select into生成一个空表如果要生成一个空的表结构不包含任何数据可以给定一个恒不等式如下 select * into #temp from sysobjects where 12
select * from #temp 二. INSERT INTO1. 使用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(128),
RoleName nvarchar(128),
LoginName nvarchar(128),
DefDBName nvarchar(128),
DefSchemaName nvarchar(128),
UserID smallint,
SID smallint
)insert into #helpuser exec sp_helpuserselect * from #helpuser 1.3 保存从动态语句返回的结果集 create table test_dbcc
(
TraceFlag varchar(100),
Status tinyint,
Global tinyint,
Session tinyint
)insert into test_dbcc exec(DBCC TRACESTATUS)select * from test_dbcc 对于动态SQL或者类似DBCC这种非常规的SQL语句都可以通过这种方式来保存结果集。 2. 不能嵌套使用insert exec语句 2.1 下面这个例子尝试保存sp_help_job的结果集到临时表发生错误 create table #JobInfo
(
job_id uniqueidentifier,
originating_server nvarchar(128),
name nvarchar(128),
enabled tinyint,
description nvarchar(512),
start_step_id int,
category nvarchar(128),
owner nvarchar(128),
notify_level_eventlog int,
notify_level_email int,
notify_level_netsend int,
notify_level_page int ,
notify_email_operator nvarchar(128),
notify_netsend_operator nvarchar(128),
notify_page_operator nvarchar(128),
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(128),
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 8164, Level 16, State 1, Procedure sp_get_composite_job_info, Line 72An 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中作者提到过(1) 首先到打开服务器选项Ad Hoc Distributed Queries exec sp_configure show advanced options,1
RECONFIGURE
GO
exec sp_configure Ad Hoc Distributed Queries,1
RECONFIGURE
GO (2) 通过OPENROWSET连接到本机运行存储过程取得结果集使用windows认证 select * into #JobInfo_S1
from openrowset(sqloledb, server(local);trusted_connectionyes,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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89600.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!