无法使用 SELECT INTO 语句向表 '#tb' 中添加标识列,该表中已有继承了标识属性的列 'fld1'。这个问题如何解决????????

Kidwind 2005-07-05 04:57:54
我想用一个临时表保存现存表的所有字段内容,但我要在临时表新建一个标识字段使用(IDENTITY函数),这样的话如果现存表中已经存在了标识字段的话,就会出现"该表中已有继承了标识属性的列"的错误,请问如何解决?????
...全文
576 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
可以了,结贴结贴,paoluo兄谢了
paoluo 2005-07-05
  • 打赏
  • 举报
回复
楼上哥们的方法肯定不行,因为楼主强调了要保留原标识列的值。
Frewin 2005-07-05
  • 打赏
  • 举报
回复
if exists(SELECT *
FROM dbo.syscolumns INNER JOIN
dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id
WHERE (dbo.syscolumns.colstat = 1) And dbo.sysobjects.name ='表名')
begin
print '存在标识'
----下面将标识删除
select * into #tmp from 表名
declare @str varchar(8000)
set @str='alter table #tmp add coln int '
exec(@str)
set @str='update #tmp set coln= 标识'
exec(@str)
set @str='alter table #tmp drop column 标识'
exec(@str)
set @str='select *,identity(int,1,1) As Fid into #tmp2 From #tmp '
exec(@str)
exec('select * from #Tmp2')
end
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
哦,试看OK马上给分
pbsql 2005-07-05
  • 打赏
  • 举报
回复
你强调N遍不如听paoluo(一天到晚游泳的鱼)一句话
paoluo 2005-07-05
  • 打赏
  • 举报
回复
楼主有没有看回复啊??
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
再一次再一次的强调:
而且保存哪一个表是动态传递的参数,所以并不知道表中是否有标识列及其它字段的类型!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
再一次再一次的强调:
而且保存哪一个表是动态传递的参数,所以并不知道表中是否有标识列及其它字段的类型!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
paoluo 2005-07-05
  • 打赏
  • 举报
回复
回复人: Kidwind(风儿) ( ) 信誉:100 2005-07-05 17:05:00 得分: 0


再次强调:
如果我要同时保存标识列的值先呢?而且保存哪一个表是动态传递的参数,所以并不知道表中是否有标识列及其它字段的类型


------------------------------
看看我的例子,就可以满足你的要求的。
pbsql 2005-07-05
  • 打赏
  • 举报
回复
可以这样:
SELECT 现id=identity(int,1,1),id=cast(原id as int),其他字段 INTO #临时表 from 现存表
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
再次强调:
如果我要同时保存标识列的值先呢?而且保存哪一个表是动态传递的参数,所以并不知道表中是否有标识列及其它字段的类型
paoluo 2005-07-05
  • 打赏
  • 举报
回复
--建立测试环境
Create Table emp
(empID Int Identity(1,1),
empName Nvarchar(10))
Insert emp Values(N'张三')
Insert emp Values(N'李四')
Insert emp Values(N'王五')
Insert emp Values(N'Bill')
Insert emp Values(N'leo')
Insert emp Values(N'CC')
--测试
--这里语句会出错
--Select ID=Identity(Int,1,1),* Into #T from emp Order By empName

--这条语句就可正常运行
Select ID=Identity(Int,1,1),* Into #T from (Select TOP 100 Percent * from emp) A Order By empName

Select * from #T
--删除测试环境
Drop Table emp,#T
--结果
/*
ID empID empName
1 4 Bill
2 6 CC
3 5 leo
4 1 张三
5 2 李四
6 3 王五
*/
Frewin 2005-07-05
  • 打赏
  • 举报
回复
因为你那个源数据表有标识了,
刚才有点错误
select t1.col1,t1.col2,identity(int,1,1) As Fid into #tmp From t1 --要排除t1中标识的列
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
如果我要同时保存标识列的值先呢?而且保存哪一个表是动态传递的参数,所以并不知道表中是否有标识列及其它字段的类型
Kidwind 2005-07-05
  • 打赏
  • 举报
回复
如果我要同时保存标识列的值先呢?而且保存哪一个表是动态传递的参数,所以并不知道表中是否有标识列及其它字段的类型
Frewin 2005-07-05
  • 打赏
  • 举报
回复
如果一定要用原表的标识列,可以这样。
Create Table #Tmp(Fid int identity(1,1) Not NULL, COL1.......)
Insert Into #tmp(col1,......)
select col1.. From 原表
Frewin 2005-07-05
  • 打赏
  • 举报
回复
因为你那个源数据表有标识了,
select t1.col1,t1.col2,identity(int,1,1) into #tmp From t1 --要排除t1中标识的列

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧