简单问题:用"select * into 新表 from 表1 "语句,怎么让生成表和“新表”表结构完全一样呢?

songfengerer 2003-10-17 08:45:04
我想用"select * into 新表 from 表1“"select 列1,列2,列3,列4 into 新表 from 表1 "语句来生成新表,
但这样生成的"新表"表结构会变得和"表1"不完全一致,比如说:
1、表1中有自动加1的主键值,新表中则没有;
2、生成“新表”中部分字段类型会变成varchar型,并且长度会变;
3、“表1”中允许为空的字段在“新表”中变的不允许为空。
4。。。。
所以我想生成和原表结构完全一致 的表结构,怎么写Sql语句呢???

...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazycyber 2003-10-17
  • 打赏
  • 举报
回复
up
youngby 2003-10-17
  • 打赏
  • 举报
回复
--原来数据库中JOBS表的生成脚本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK__employee__job_id__1BFD2C07]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[employee] DROP CONSTRAINT FK__employee__job_id__1BFD2C07
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[jobs]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[jobs]
GO

CREATE TABLE [dbo].[jobs] (
[job_id] [smallint] IDENTITY (1, 1) NOT NULL ,
[job_desc] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[min_lvl] [tinyint] NOT NULL ,
[max_lvl] [tinyint] NOT NULL
) ON [PRIMARY]
GO


--执行 SELEC INTO后的生成JOBS1的脚本

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[jobs1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[jobs1]
GO

CREATE TABLE [dbo].[jobs1] (
[job_id] [smallint] IDENTITY (1, 1) NOT NULL ,
[job_desc] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[min_lvl] [tinyint] NOT NULL ,
[max_lvl] [tinyint] NOT NULL
) ON [PRIMARY]
GO


可以看出JOBS 和JOBS1在表结构上完全一致,除了外健约束,
如果你想让它们的约束都完全相同,就不能用SELECT INTO语句了
welyngj 2003-10-17
  • 打赏
  • 举报
回复
before:
CREATE TABLE [a] (
[a] [int] NULL ,
[b] [int] NULL ,
[c] [int] NULL ,
CHECK (((not([a] is null and [b] is null and [c] is null))))
) ON [PRIMARY]
GO

select * into aa from a

after:
CREATE TABLE [aa] (
[a] [int] NULL ,
[b] [int] NULL ,
[c] [int] NULL
) ON [PRIMARY]
GO

约束丢失。
welyngj 2003-10-17
  • 打赏
  • 举报
回复

运行select * into hh from h前:
CREATE TABLE [h] (
[a] [int] IDENTITY (1, 1) NOT NULL ,
[b] [char] (4) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
运行select * into hh from h后:
CREATE TABLE [hh] (
[a] [int] IDENTITY (1, 1) NOT NULL ,
[b] [char] (4) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

可见:1、“表1中有自动加1的主键值,新表中则没有
2、生成“新表”中部分字段类型会变成varchar型,并且长度会变;
3、“表1”中允许为空的字段在“新表”中变的不允许为空。“得出的结论是不正确。
表的结构完全相同。但如果原表有约束,则后来的表将丢失。

songfengerer 2003-10-17
  • 打赏
  • 举报
回复
to: youngby(诗人)
我已经说了啊,这样生成的新表,表结构和原表不一样,会发生变化的!!
youngby 2003-10-17
  • 打赏
  • 举报
回复
select * into 新表 from 表1

34,576

社区成员

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

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