当前位置:首页 » 编程语言 » sql表变量删除
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql表变量删除

发布时间: 2022-05-16 21:18:23

A. sql Server 表变量和临时表的区别

临时表、表变量的比较
1、临时表
临时表包括:以#开头的局部临时表,以##开头的全局临时表。
a、存储
不管是局部临时表,还是全局临时表,都会放存放在tempdb数据库中。
b、作用域
局部临时表:对当前连接有效,只在创建它的存储过度、批处理、动态语句中有效,类似于C语言中局部变量的作用域。
全局临时表:在所有连接对它都结束引用时,会被删除,对创建者来说,断开连接就是结束引用;对非创建者,不再引用就是结束引用。
但最好在用完后,就通过drop table 语句删除,及时释放资源。
c、特性
与普通的表一样,能定义约束,能创建索引,最关键的是有数据分布的统计信息,这样有利于优化器做出正确的执行计划,但同时它的开销和普通的表一样,一般适合数据量较大的情况。
有一个非常方便的select ... into 的用法,这也是一个特点。

2、表变量
a、存储
表变量存放在tempdb数据库中。
b、作用域
和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。
c、特性
可以有主键,但不能直接创建索引,也没有任何数据的统计信息。表变量适合数据量相对较小的情况。
必须要注意的是,表变量不受事务的约束,

B. 关于SQL触发器的问题 同时删除多行,这些行插入到另一张表中

同时删除多行,把这些删除的行插入到另一张表中还学要的什么条件么?
直接获取deleted内的删除数据插入到目标表中就好了吧?如下试试?
CREATE TRIGGER [dbo].[classlist_delete]
ON [dbo].[classlist]
AFTER DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

IF EXISTS(SELECT 1 FROM DELETED)--存在删除
BEGIN
BEGIN TRY
BEGIN TRAN --开始事务
--执行插入
insert into delclasslist(StuID,Student,fid,StuClass,Teacher,CTime,
Term,Remark,ispay,absent,cid)
select StuID,Student,fid,StuClass,Teacher,CTime,Term,Remark,ispay,absent,id
from deleted
COMMIT TRAN --提交事务
END TRY
BEGIN CATCH
--如果插入失败,则回滚事物
IF XACT_STATE()<>0
ROLLBACK TRAN
END CATCH
END

END
---------------------------------------------
MS-SQL SERVER2005及以上版本用output子句便可以实现在删除时便可以往另一张表中插入删除信息:如下例子:
--------------------1、INSERT+OUTPUT子句----------------------
--演示表变量
DECLARE @T TABLE(ID INT)
--在INSERT语句中使用OUTPUT子句
INSERT @T
OUTPUT inserted.ID
SELECT object_id
FROM sys.objects O

-----------------2、UPDATE+OUTPUT子句-----------
--更新:先删后改
UPDATE A
SET ID=O.object_id+2
OUTPUT O.name,deleted.ID AS ID_BEFORE_UPDATE,inserted.ID AS ID_AFTER_UPDATE
FROM @T A,sys.objects O
WHERE A.ID=O.object_id

--SELECT * FROM sys.objects
-----------------3、DELETE+OUTPUT子句-----------
--用于保存输出结果的表变量
DECLARE @RE TABLE(
ID INT,
NAME VARCHAR(100)
--NAME SYSNAME
)
--删除
DELETE A
OUTPUT DELETED.ID,'被删除的ObjectName:'+O.name
INTO @RE
FROM @T A,sys.objects O
WHERE A.ID=O.object_id
--显示结果
SELECT * FROM @RE

C. sql 根据ID循环删除行

--可以将字符串分解成行插入到一个表变量
--然后根据ID 删除要删除的数据
--
--
--这是以前CSDN大版主邹建 写的一个方法,很好很强大
/*
分解公式
将公式按运算分解到表中
*/
declare @str varchar(100)
declare @i int,@str1 varchar(10),@str2 varchar(10)
set @str='1,2,3,4' --要分解的字符串
declare @tb table(num varchar(20),operation varchar(2)) --定义保存结果的表
--公式分拆
set @i=patindex('%[^0-9]%',@str)
while @i>0
begin
select @str1=left(@str,@i-1)
,@str=substring(@str,@i,8000)
,@i=patindex('%[0-9]%',@str)
,@str2=left(@str,@i-1)
,@str=substring(@str,@i,8000)
,@i=patindex('%[^0-9]%',@str)
insert into @tb values(@str1,@str2)
end
if @str<>'' insert into @tb values(@str,'')

--显示分拆结果
select * from @tb

--删除就这样 @tb一定要取个别名
DELETE TabelName
FROM @tb AS TA
WHERE TabelName.ID = TA.ID

以上是SQLSERVER 写法 希望对你有帮助

D. sql2005中临时表#table和表变量@table有什么不同呀

我记得以前在哪些地方看到过。

表变量和临时表是两个不同的东西,但是他们是可以用于一些共同的用途的。不过要注意一下使用的场景。
临时表
临时表有两种类型:本地表和全局表。本地临时表的名称都是以“#”为前缀,全局临时表的名称都是以“##”为前缀。临时表的访问是有可能造成物理IO的。临时表可以有索引、数据统计这些。
表变量
表变量是变量的一种,表变量也分为本地及全局的两种。表变量存放在内存中,但是并不是没有限制而是有一定限制的,如果表变量数据量超过阈值,会把内存耗尽,然后使用硬盘空间,这时再访问他就会增加了内存调入调出的机会,反而降低速度。表变量是不能有索引的。
大概就是这些,其他的记不住了。

E. sql临时表表变量的使用方法与什么时候用最好

临时表、表变量的比较
1、临时表
临时表包括:以#开头的局部临时表,以##开头的全局临时表。
a、存储
不管是局部临时表,还是全局临时表,都会放存放在tempdb数据库中。
b、作用域
局部临时表:对当前连接有效,只在创建它的存储过度、批处理、动态语句中有效,类似于C语言中局部变量的作用域。
全局临时表:在所有连接对它都结束引用时,会被删除,对创建者来说,断开连接就是结束引用;对非创建者,不再引用就是结束引用。
但最好在用完后,就通过drop table 语句删除,及时释放资源。
c、特性
与普通的表一样,能定义约束,能创建索引,最关键的是有数据分布的统计信息,这样有利于优化器做出正确的执行计划,但同时它的开销和普通的表一样,一般适合数据量较大的情况。
有一个非常方便的select ... into 的用法,这也是一个特点。

2、表变量
a、存储
表变量存放在tempdb数据库中。
b、作用域
和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。
c、特性
可以有主键,但不能直接创建索引,也没有任何数据的统计信息。表变量适合数据量相对较小的情况。
必须要注意的是,表变量不受事务的约束,

F. SQL用一个变量来代表多个表,所有操作都直接对这个表变量进行操作,省去反复修改表名的麻烦,如何编写

一个表变量只能存一个表的数据,不能多个的

G. 关于SQL一些常用语句

(1) 数据记录筛选:

sql="select * from 数据表 where 字段名=字段值 order by 字段名 "
sql="select * from 数据表 where 字段名 like ‘%字段值%‘ order by 字段名 "
sql="select top 10 * from 数据表 where 字段名 order by 字段名 "
sql="select * from 数据表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"
sql="select * from 数据表 where 字段名 between 值1 and 值2"

(2) 更新数据记录:

sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

(3) 删除数据记录:

sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)

(4) 添加数据记录:

sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)

用 rs("别名") 获取统的计值,其它函数运用同上。

(5) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)

(6) 记录集对象的方法:
rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录

判断所填数据是数字型

if not isNumeric(request("字段名称")) then
response.write "不是数字"
else
response.write "数字"
end if

H. sql 表变量 的定义

你可以用临时表
select top 0 * into #table from table

那就没办法了,只能你自己一个一个写了,字段少还好说,要是多的话
你就在你原表上点击生成一个脚本往方法里粘贴吧

I. SQL SERVER怎么去掉重复数据

首先,你的表设计就有问题。存在两行完全相同的数据。在设计表时,要设计一个primary key,主键。在维护数据方面,比较方便。

你用临时表,表变量的方式临时存储数据。再更新表内容。
用关键字distinct过滤掉重复的记录

select distinct * #t from a
insert into a
select * from #t
drop table #t
这样能除去重复的数据。

根据你的描述,group by 都不用了。

J. sql清空临时表

你这不是临时表
create table #tempTable (id int identity(1,1),name varchar(20))

insert into #temptable(name)values('1')
insert into #temptable(name)values('1')
insert into #temptable(name)values('1')
select * from #temptable--看这里id是从1开始的

delete #temptable
DBCC CHECKIDENT (#temptable, RESEED, 0)--关键

insert into #temptable(name)values('2')
insert into #temptable(name)values('3')
insert into #temptable(name)values('3')
select * from #temptable--id重新从1开始