Sql server 进行表中数据复制转移遇到的问题

前段时间的工作中,公司要求对sqlserver 中某些初始化的基础数据完全复制到另一个相同表表结构的数据表中,当时第一反应写 sql语句如下:Insert into Table1(Filed1,Filed2)select Filed1,Filed2 from Table2 。执行成功!!!

仔细一查看,数据全乱套了(Id是自增Id,但Id 不一定是连续的)。

于是采用B方案:

把Table1 中Id的自增取消,先把数据插入进去再重新加上自增长(问题解决)。

但是 当 Table1 是存储过程动态生成的,同时要求把数据完全复制到其中,B计划失效!

于是采用C方案,具体代码如下:

创建Table1

CREATE TABLE [dbo].[Table_1](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Filed1] [varchar](50) NULL,
[Filed2] [varchar](50) NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

然后:Insert into Table1(Filed1,Filed2)select Filed1,Filed2 from Table2(这种写法肯定不对,自增Id问题)

于是:SET IDENTITY_INSERT [Table_1] ON insert into Table1(ID,Filed1,Filed2) select ID,Filed1,Filed2 from Table1  SET IDENTITY_INSERT [Table_1] off (SET IDENTITY_INSERT [Table_1] ON || OFF    允许将显式值插入表的标识列中。)

执行因为它不存在或者您没有所需的权限

于是加上: 数据库名称.dbo.

SET IDENTITY_INSERT 数据库名称.dbo.[Table_1] ON insert into Table1(ID,Filed1,Filed2) select ID,Filed1,Filed2 from Table1  SET IDENTITY_INSERT 数据库名称.dbo.[Table_1] off   执行成功!

到此,问题解决!工作中经常遇到此类问题,希望对大家有所帮助!

原文地址:https://www.cnblogs.com/xiaocRole/p/9483829.html

时间: 2024-10-10 00:31:05

Sql server 进行表中数据复制转移遇到的问题的相关文章

将txt文件内容导入sql server 数据库表中

将类似这样的txt文件,如何导入到sql server 数据库表中呢? 第一步,在开始菜单中 找到 sql server 的导入和导出数据 然后,在数据源 的下拉框中 选择 平面文件源 基本都是点击 下一步 选择好要导入数据的数据库 与表: 编辑映射 : 点击下一步 执行 然后 完成 查看数据库 表 数据已经导入 成功

SqlServer将表中数据复制到另一张表

insert into phone2(ph,attr,type,carrier) select top 1000 ph,attr,type,carrier from phone 将表phone的字段和前1000条数据复制到Phone2表 数据库中的某个表删除重复数据(phone2表不能存在) select distinct  * into phone2 from phone 表phone的数据放到phone2中(phone2表可以存在) insert into phone2(ph,attr,ty

向SQL Server 现有表中添加新列并添加描述.

注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先附上存储过程然后解释) 代码 /********调用方法********** 作用: 添加列并添加列描述信息 调用: exec [SetColumnInfo] '表名', '列名', N'列说明,描述','列类型{默认:NVARCHAR(50)}','列默认值{默认:NULL}' *********

SQL Server 判断表中是否存在某字段

原文:SQL Server 判断表中是否存在某字段 功能:判断表中是否存在某字段,若不存在,则新增该字段 语句: IF NOT EXIST (SELECT 1 FROM [DATABASE].SYS.SYSCOLUMNS WHERE ID=OBJECT_ID([DATABASE].[SCHEMA].[TABLENAME]) AND NAME='COLUMN_NAME') ALTER TABLE [TABLENAME] ADD [COLUMN_NAME] [COLUMN_TYPE] p.s. 之前

sql Server获取表中今天、昨天、本周、上周、本月、上月等数据

在做Sql Server开发的时候有时需要获取表中今天.昨天.本周.上周.本月.上月等数据,这时候就需要使用DATEDIFF()函数及GetDate()函数了.DATEDIFF ( datepart , startdate , enddate )释义:计算时间差datepare值:year | quarter | month | week | day | hour | minute | second | millisecondstartdate:开始日期enddate :结束日期GetDate(

SQL Server用表组织数据

一.主键 主键作为表中的唯一标识,标识这一列不允许出现重复数据    如果两列或多列组合起来唯一标识表中的每一行,该主键叫"复合主键" 选择主键的原则     最少性      尽量选择单个键作为主键     稳定性      尽量选择数值更新少的列作为主键二.默认值 设置列默认值的前提是这一列必须是允许为空的,否则设置默认值无效    如果在插入数据或者更改数据时,这一列不输入的话那么会按照默认值进行绑定 三:标识列 将想要设置的标识列设置成主键,保证这一列的数据类型为int,然后在

如何将sql server 数据库表中的某一列的某一字符替换成需要的字符

实例:select   replace(chexing, '微型车', '0001')   from   T_MODEL chexing:要替换的字段名称. 微型车:要被替换的内容. 0001:替换后的内容. 注:replace适用于非:text,ntext字段!!

SQL Server删除表信息的三种方法

1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student      --不加where条件,删除表中的所有记录 go (2)删除表中符合条件的记录 USE student GO DELETE student where Id='001'    --删除表中符合条件的记录 GO 2.使用TRUNCATE删除表中的信息 USE student GO TRUNCATE TABLE    student   --删除表中

导出 SQL SERVER 表中数据为脚本

ALTER PROCEDURE [dbo].[Usp_OutputData] @tablename sysname, @outputIdentitycolumn int AS declare @column varchar(3000) declare @columndata varchar(8000) declare @sql varchar(8000) declare @xtype tinyint declare @name sysname declare @objectId int decl