SQL Server 2012 在sp_executesql 中生成的临时表的可见性
在sql存储过程中,经常使用到动态sql语句,写法类似于这样
Set @strParameter=N'@StartTime datetime,@EndTime datetime'
Exec sp_executesql @strSql,@strParameter,@StartTime,@EndTime
为了满足业务需求,我们经常会在存储过程中使用到临时表。根据作用域的不同,分为全局临时表和用户临时表。
如果在动态sql语句中构造了用户临时表,代码如下:
exec SP_EXECUTESQL N'SELECT * INTO #temp FROM TestTable'
SELECT * FROM #temp
执行后会报如下错误
消息 208,级别 16,状态 0,第 37 行
对象名 '#temp' 无效。
在ssms中调试,执行到该动态SQL语句时
会出现异常“未将对象设置引用到对象实例”
这是由于临时表只存在于动态sql这个作用域内,也就是只在动态SQL可见,在当前存储过程中是不可见的,所以会出现找不到该临时表的错误。
首先创建测试表
IF object_id('TestTable') IS NOT NULLDROP TABLE TestTable
GOCREATE TABLE TestTable(id INT IDENTITY(1,1),Info VARCHAR(10))
GO
INSERT TestTable SELECT 'a'
UNION ALL SELECT 'b'
GO
然后依次执行以下三个脚本
脚本一:
EXEC('SELECT * INTO #temp FROM TestTable')
SELECT * FROM #temp
脚本二:
exec SP_EXECUTESQL N'SELECT * INTO #temp FROM TestTable'
SELECT * FROM #temp
脚本三:
SELECT * INTO #temp FROM TestTable
EXEC('SELECT * FROM #temp')
–DROP TABLE #temp
执行后发现只有脚本三是成功的,其他连个脚本执行后都会提示:
Msg 208, Level 16, State 0, Line 2
Invalid object name '#temp'.
知道了问题出现的原因,解决方案很简单,将用户临时表替换为全局临时表就ok了,也就是在#temp前再加个‘#’,即 ##Temp
SQL Server 2012 在sp_executesql 中生成的临时表的可见性相关推荐
- SQL Server 2012 安装过程中出现:试图执行未经授权的操作..
SQL Server 2012 安装过程中出现:试图执行未经授权的操作- 操作系统:win10 家庭版/专业版 错误描述:刚开始安装的时候 出现错误:试图执行未授权的操作 安装进度进行到最后的四分之一 ...
- SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?...
本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表, 有些人习惯在存储过程结束的 ...
- SQLServer · 最佳实践 · RDS for SQL Server 2012 权限限制的提升与改善
title: SQLServer · 最佳实践 · RDS for SQL Server 2012 权限限制的提升与改善 author: 石沫 背景 SQL Server 作为一种强大的关系型数据库, ...
- mysql数据库应用与开发姜桂洪 课后答案_数据库原理及应用(SQL Server 2012) 王丽艳版 课后习题第一至六章答案...
有很多小伙伴说在网上很难找到这本教材的答案,临近期末复习关头,特将此文章共享到知乎,希望大家考试旗开得胜! 第一章 一.填空题 1.载体 2. 数据库 3.数据库 4.数据库 5.模式 6.例行程序 ...
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍...
在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...
- Win7 安装SQL SERVER 2012需要SP1补丁
在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...
- SQL server 2012 安装SQL2012出现报错: 启用 Windows 功能 NetFx3 时出错
在window server 2012服务器上,安装 SQL Server 2012的过程中,报了一个错误,一个安装失败, 在安装SQL 2012的过程中.出现下面错误:启用 Windows 功能 N ...
- sql数据库服务器端口修改,SQL SERVER 2012更改默认的端口号为1772
打开开始菜单,找到sqlserver的配置管理器,点击打开 按下图配置右边窗口三项: 按下图配置右边三项: 按下图配置右边三项: 点击下图左边的SQL Server网络配置/MSSQLSERVER的协 ...
- 微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project
SQL Server 2012 中提供了开发 SSAS 项目的两种模型,一种是新增加的 Tabular Model 表格模型,另一种就是原始的 Multidimensional Model 多维模型. ...
最新文章
- 从协议入手,剖析OAuth2.0(译 RFC 6749)
- (C++)输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。
- MySQL分库分表环境下全局ID生成方案
- [读书笔记] 深入探索Android热修复技术原理 (手淘技术团队)
- Springboot 常见请求方式
- cxf 服务端soap报文_使用Apache CXF开发SOAP Web服务
- magento 获取 pages/Static Block 内容 Get Pages/Static Block in Magento
- virtualbox 安装kali linux虚拟机,kali Linux安装virtualbox虚拟机之爬坑经历
- 赛锐信息:SAP 程序优化
- java 集群会话管理_架构设计之Spring-Session分布式集群会话管理
- 帆软报表登录-某些用户需要用自定义的登陆界面,有些用户用默认登录界面
- 保险公司在线签名 html5,html5手写签名
- 学习数据库(1)——初始数据库
- 万能的应用商店_WiFi万能助手
- 开关电源Buck电路CCM和DCM工作模式
- 【清华大学】操作系统 陈渝——Part5 虚拟存储概念
- 逝去的2018年,年度总结
- 常用的curl命令及参数详解
- Adobe无法安装错误代码127
- 正态性/方差齐性检验及stata实现
热门文章
- javascript设计模式之装饰器模式(结构型模式)
- 城市视觉技术在智慧城市中的应用
- CMOS与MEMS的区别
- PHPICP备案查询接口源码
- ThinkInJava 中文版-下载
- lin总线可以控制几个节点_LIN主从节点设计与实现
- 服务器2012r2安装虚拟,Windows Server 2012 R2 安装VMware Tools的正确姿势(实现物理机和虚拟机文件互传)...
- mysql5.7安装依赖_MySQL5.7安装
- springcloud-es的学习
- MKVToolnix Crack