关于创建临时表的小问题
时间:2011-11-07
来源:互联网
select id=identity(int,1,1),* into #linshitable from deliveryplan
select * from #linshitable
select id=identity(int,1,1),* into #linshitable from deliveryplan left join userinfo on userinfo.pid=deliveryplan .oid;
select * from #linshitable
第二种连表创建临时表时不管2张表里有没有主键都没问题,
但是像第一种方式的,表deliveryplan里如果有主键,会提示创建不成功。
消息 8108,级别 16,状态 1,第 1 行
无法使用 SELECT INTO 语句将标识列添加到表 '#linshitable ',该表的列 'oid' 已继承了标识属性。
怎么解决这个问题呢?
作者: luoyehanfei 发布时间: 2011-11-07
作者: ssp2009 发布时间: 2011-11-07
作者: fredrickhu 发布时间: 2011-11-07
oid已经是自增列了么?
对。oid是自增列了。
作者: luoyehanfei 发布时间: 2011-11-07
作者: luoyehanfei 发布时间: 2011-11-07
--在处理前,先检查表有没有自增列,针对不同情况,进行不同处理 declare @table_name varchar(255) if exists(select 1 from sysobjects,syscolumns where sysobjects.name = @table_name and sysobjects.id = syscolumns.id and columnproperty(sysobjects.id, syscolumns.name, 'IsIdentity') = '1') begin --有自增列时,将自增列字段排除在外 end else begin --没有自增列的处理 end
作者: jyh070207 发布时间: 2011-11-07
SQL code
--在处理前,先检查表有没有自增列,针对不同情况,进行不同处理
declare @table_name varchar(255)
if exists(select 1 from sysobjects,syscolumns
where sysobjects.name = @table_name
and sysobjects……
但是临时表的数据我又必须带上原表的自增列,我要用到原始表的自增列呢。
作者: luoyehanfei 发布时间: 2011-11-07
--一个表里一个自增列. IF object_id('tb1')IS NOT NULL DROP TABLE tb1 CREATE TABLE tb1 ( id INT NOT NULL IDENTITY(1,1), SID INT ) DECLARE @a AS INT SET @a=1 WHILE @a<20 BEGIN INSERT INTO tb1 VALUES(@a) --PRINT @a SET @a=@a+1 END SELECT *FROM tb1 IF object_id('tb2') IS NOT NULL DROP TABLE tb2 CREATE TABLE tb2 ( vid INT NOT NULL IDENTITY(1,1), vname VARCHAR(20) ) ALTER TABLE tb2 ALTER COLUMN vname VARCHAR(40) DECLARE @c AS VARCHAR(40)='a' WHILE LEN(@c)<20 BEGIN INSERT INTO tb2 VALUES(@c+'a') --SELECT @c+'a' SET @c=@c+'a' END SELECT IDENTITY(INT,1,1)AS nid,* INTO # FROM tb1 CREATE VIEW tb1_2 AS ( SELECT * FROM tb1 JOIN tb2 ON tb1.id=tb2.vid ) SELECT IDENTITY(INT,1,1)AS nid,* INTO # FROM tb1_2 SELECT *FROM #
刚刚自己测试了一遍...
select identity语句是不可以和有 自增列的真是表 插入到一张临时表里的..
不过这个语句是可以和(派生表),(虚拟表),(cte),(表表达式) 一起插入到临时表里的
语句是先执行from 的...因为from 后面用连接 把这个表变成了派生表...所以
select identity(int,1,1) 是可以跟这个派生表 一起插入到一张临时表里的...
水平有限,,,希望对你有帮助
作者: public0011 发布时间: 2011-11-07
作者: luoyehanfei 发布时间: 2011-11-07
select identity(int,1,1) as idx,oid+0 as oid,name into #a from deliveryplan
作者: hongnacarla 发布时间: 2011-11-07
作者: hongnacarla 发布时间: 2011-11-07
SQL code
select id=identity(int,1,1),* into #linshitable from (select * from deliveryplan) a; select * from #linshitable
作者: stublue 发布时间: 2011-11-07
--创建视图 create view vw as select * from deliveryplan select id=identity(int,1,1),* into #linshitable from vw --这个应该不会很影响性能吧 select * from #linshitable
作者: public0011 发布时间: 2011-11-08
作者: chenguang79 发布时间: 2011-11-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28