‘壹’ sql临时表表变量的使用方法与什么时候用最好
临时表、表变量的比较
1、临时表
临时表包括:以#开头的局部临时表,以##开头的全局临时表。
a、存储
不管是局部临时表,还是全局临时表,都会放存放在tempdb数据库中。
b、作用域
局部临时表:对当前连接有效,只在创建它的存储过度、批处理、动态语句中有效,类似于C语言中局部变量的作用域。
全局临时表:在所有连接对它都结束引用时,会被删除,对创建者来说,断开连接就是结束引用;对非创建者,不再引用就是结束引用。
但最好在用完后,就通过drop table 语句删除,及时释放资源。
c、特性
与普通的表一样,能定义约束,能创建索引,最关键的是有数据分布的统计信息,这样有利于优化器做出正确的执行计划,但同时它的开销和普通的表一样,一般适合数据量较大的情况。
有一个非常方便的select ... into 的用法,这也是一个特点。
2、表变量
a、存储
表变量存放在tempdb数据库中。
b、作用域
和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。
c、特性
可以有主键,但不能直接创建索引,也没有任何数据的统计信息。表变量适合数据量相对较小的情况。
必须要注意的是,表变量不受事务的约束,
‘贰’ sql中怎么放临时变量
我提供一个演示例子吧。
select curdate() into @today;
select @today;
‘叁’ SQL中,如何使用临时变量
select a-b as c from tableA
这个我建议你看一下PL/SQL编程
‘肆’ sql server 存储过程中使用循环,需要定义临时变量a(@i),0<@i<15.请问该怎么定义它。
DECLARE @i INT
DECLARE @a1 INT
DECLARE @a2 INT
DECLARE @a3 INT
SET @i=1
SET @a1=0
SET @a2=0
SET @a3=0
CREATE TABLE #t1(
a1 INT,
a2 INT,
a3 int
)
WHILE @i<10
BEGIN
SET @a1 = 2*@i + 1
SET @a2 = @i +3 +@a1
SET @a3 = 3*@i +5 + @a2
INSERT INTO #t1(a1,a2,a3) VALUES(@a1,@a2,@a3)
SET @i +=1
end
SELECT * FROM #t1
‘伍’ 如何在存储过程定义一个临时变量
SQL 声明变量,declare @Tnvarhcar(20)
SQL 存储过程如下:
create PROCEDURE [dbo].[Test]
AS
BEGIN
declare @T nvarchar(50)
set @T='abc'
select @T
return 0
END@T 代表临时变量,存储过程执行完成,变量结束。
‘陆’ SQL数据库中临时表,临时变量和with as关键词创建“临时表”的区别
》临时表:物理上存在的,使用时与正式表无差别;只是在会话结束时,DBy引擎会将它自动删除;
》临时变量:形式上是个变量,而不是表;同样是在会话中有效;会话结束,就消失;
》WITH ... AS是公共表达式(CTE)的语法表示,它只是逻辑概念,没有物理对象。
一个类似情况就是View(相对于Table),没有物理对象。
但View至少还有定义存贮在DB系统表中,而CTE只是一种语法表示(仅在执行时才会被解析、翻译)。
‘柒’ sql结果集临时变量
一条语句就解决..select LogDate, max(value) from Mth_DayLog where LogDate between '2014-03-02 00:00:00.000' and '2014-03-31 00:00:00.000';
‘捌’ SQL中变量的种类及表现形式
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
拜托路过的各位高手,这个是我考试的题目,麻烦告诉我答案.谢谢~~
解析:
MS SQL Server中的变量- -
在SQL中,我们常常使用临时表来存储临时结果,对于结果是一个 *** 的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个SQL语句中的某些元素经常变化时,比如选择条件,(至少我想)应该使用局部变量。当然MS SQL Server的全局变量也很有用。
>>>>局部变量
声明:DECLARE @local_variable data_type
@local_variable 是变量的名称。变量名必须以 at 符 (@) 开头。data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。
示例:
use master
declare @SEL_TYPE char(2)
declare @SEL_CUNT numeric(10)
set @SEL_TYPE = 'U'/*user table*/
set @SEL_CUNT = 10
/*返回系统中用户表的数目*/
select @SEL_CUNT = COUNT(*)
from sysobjects
where type = @SEL_TYPE
select @SEL_CUNT as 'User table ''s count'
如果要返回系统表的数目,可以用set @SEL_TYPE = 'S'
可能这个例子并不能说明使用变量的好处,我只是想说明使用方法。当一组(几个甚至几十个)SQL语句都使用某个变量时,就能体会到他的好处了。
>>>>全局变量
全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。下面是我统计了一些较为常用的变量。
@@CONNECTIONS
返回自上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS
返回连接上最后打开的游标中当前存在的合格行的数量。
@@DATEFIRST
返回每周第一天的数字
@@ERROR
返回最后执行的SQL 语句的错误代码。
@@FETCH_STATUS
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
@@IDENTITY
返回最后插入的标识值
@@LANGID
返回当前所使用语言的本地语言标识符(ID)。
@@LANGUAGE
返回当前使用的语言名。
@@LOCK_TIMEOUT
返回当前会话的当前锁超时设置,单位为毫秒。
@@PROCID
返回当前过程的存储过程标识符 (ID) 。
@@ROWCOUNT
返回受上一语句影响的行数。
@@SERVERNAME
返回运行 的本地服务器名称。
@@SPID
返回当前用户进程的服务器进程标识符 (ID)。
@@TRANCOUNT
返回当前连接的活动事务数。
@@VERSION
返回当前安装的日期、版本和处理器类型。
‘玖’ SQL数据库中临时表,临时变量和with as关键词创建“临时表”的区别
SQL数据库中数据处理时,有时候需要建立临时表,将查询后的结果集放到临时表中,然后在针对这个数据进行操作。
创建“临时表”(逻辑上的临时表,可能不一定是数据库的)的方法有一下几种:
1.with tempTableName as方法(05之后出现):
with temptable as 其实并没有建立临时表,只是子查询部分(subquery factoring),定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。
http://www.cnblogs.com/zhaowei303/articles/4204805.html
‘拾’ SQl 里面 我把 SQl查询语句写在一个临时变量里面,我该如何调用该变量来执行查询
set@SQL=('select * from '+@TableName+' where BatCode='+@batcode)
改为
set @SQL=('select * from '+@TableName+' where BatCode='''+@batcode+'''')
BatCode 应该是字符串类型。