sql server复制表数据到另外一个表 的存储过程

if    exists (select * from sysobjects where id=object_id(‘GenerateData‘) and  OBJECTPROPERTY(id, ‘IsProcedure‘) =1 )
    Drop Procedure GenerateData
go
CREATE PROCEDURE GenerateData
@tablename sysname
AS
begin
    declare @column varchar(2000)
    declare @columndata varchar(2000)
    declare @sql varchar(8000)
    declare @xtype tinyint
    declare @name sysname
    declare @objectId int
    declare @objectname sysname
    declare @ident int 

    set nocount on
    set @objectId=object_id(@tablename) 

    if @objectId is null -- 判断对象是否存在
    begin
        print ‘The object not exists‘
        return
    end
    set @objectname=rtrim(object_name(@objectId)) 

    if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
    begin
        print ‘object not in current database‘
        return
    end 

    if OBJECTPROPERTY(@objectId,‘IsTable‘) < > 1 -- 判断对象是否是table
    begin
        print ‘The object is not table‘
        return
    end 

    select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80 

    if @ident is not null
    print ‘SET IDENTITY_INSERT ‘+@TableName+‘ ON‘ 

    declare syscolumns_cursor cursor
    for select c.name,c.xtype from syscolumns c
    where c.id=@objectid order by c.colid 

    open syscolumns_cursor
    set @column=‘‘
    set @columndata=‘‘
    fetch next from syscolumns_cursor into @name,@xtype 

    while @@fetch_status < >-1
    begin
        if @@fetch_status < >-2
        begin
            if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理 

            begin
                set @column=@column+case when len(@column)=0 then‘‘ else ‘,‘end+@name 

                set @columndata=@columndata+case when len(@columndata)=0 then ‘‘ else ‘,‘‘,‘‘,‘end
                +case when @xtype in(167,175) then ‘‘‘‘‘‘‘‘‘+‘+@name+‘+‘‘‘‘‘‘‘‘‘ --varchar,char
                when @xtype in(231,239) then ‘‘‘N‘‘‘‘‘‘+‘+@name+‘+‘‘‘‘‘‘‘‘‘ --nvarchar,nchar
                when @xtype=61 then ‘‘‘‘‘‘‘‘‘+convert(char(23),‘+@name+‘,121)+‘‘‘‘‘‘‘‘‘ --datetime
                when @xtype=58 then ‘‘‘‘‘‘‘‘‘+convert(char(16),‘+@name+‘,120)+‘‘‘‘‘‘‘‘‘ --smalldatetime
                when @xtype=36 then ‘‘‘‘‘‘‘‘‘+convert(char(36),‘+@name+‘)+‘‘‘‘‘‘‘‘‘ --uniqueidentifier
                else @name end 

            end 

        end 

        fetch next from syscolumns_cursor into @name,@xtype 

    end 

    close syscolumns_cursor
    deallocate syscolumns_cursor 

    set @sql=‘set nocount on select ‘‘insert into ‘+@tablename+‘(‘+@column+‘) values(‘‘as ‘‘--‘‘,‘+@columndata+‘,‘‘)‘‘ from ‘+@tablename 

    print ‘--‘+@sql
    exec(@sql) 

    if @ident is not null
    print ‘SET IDENTITY_INSERT ‘+@TableName+‘ OFF‘
end
GO

EXEC GenerateData ‘同一数据库下的表名‘

原文地址:https://www.cnblogs.com/RambleLife/p/9061554.html

时间: 2024-11-09 12:30:34

sql server复制表数据到另外一个表 的存储过程的相关文章

sql server复制表数据到另外一个表的存储过程

if exists (select * from sysobjects where id=object_id('GenerateData') and OBJECTPROPERTY(id, 'IsProcedure') =1 ) Drop Procedure GenerateData go CREATE PROCEDURE GenerateData @tablename sysname --同一数据库下的表名 AS begin declare @column varchar(2000) decla

sql server 复制表从一个数据库到另一个数据库

sql server 复制表从一个数据库到另一个数据库 /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 f

Oracle与Sql Server复制表结构及数据

1.Oracle create table 新表名 AS SELECT * FROM 源表名 2.Sql Server SELECT * into 新表名 from 源表名 Oracle与Sql Server复制表结构及数据

一个有趣的SQL Server 层级汇总数据问题

看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题. 具体的问题如下: parent_id emp_id emp_name total_amout     NULL 2 Andrew 200     2 1 Nancy 100     2 3 Janet 120     3 4 Michael 80     1 5 Robert 50     每个员工的总销售额=自己的销售额+其下级员工的总销售额,     比如:     Andrew = 200_

mysql从一个表中拷贝数据到另一个表中sql语句

这一段在找新的工作,今天面试时,要做一套题,其中遇到这么一句话,从一个表中拷贝所有的数据到另一个表中的sql是什么? 原来我很少用到,也没注意过这个问题,面试后我上网查查,回来自己亲手写了写,测试了下,确实有的.现在我记录下. 这个语句是:insert into A select * from B;这个语句根据需要变化,字段一定要一致: 另一种是MySQL复制表结构及数据到新表:CREATE TABLE 新表 SELECT * FROM 旧表;例子sql语句:CREATE TABLE new_t

SQL语句技巧:查询存在一个表而不在另一个表中的数据记录

原文:SQL语句技巧:查询存在一个表而不在另一个表中的数据记录 方法一(仅适用单个字段)使用 not in ,容易理解,效率低 select A.ID from A where A.ID not in (select ID from B) 方法二(适用多个字段匹配)使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录 select A.ID from A left join B on A.ID=B.ID where

【SQL Server】sql server更改了数据表的字段/新增数据表的字段 无法保存

sql server更改了数据表的字段/新增数据表的字段  无法保存 解决方法:进入 工具-->选项-->Designers-->表设计器和数据库设计器-->取消勾选   即可

SQL Server 复制 - 发布订阅(SQL Server 数据同步)

原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布之前,需要设置好几个前置条件,发布属性和快照位置.发布主要是设置发布数据库,如未设置,所有的发布,订阅可正常进行,也可通过快照同步,但是却无法在后面的修改中实时同步. 其次,设置快照位置.快照位置设置是在“分发服务器属性”中的发布服务器设置.如果设置的位置不能被订阅机访问,订阅是最好采用发布机推送订

sql server exec 查询数据,将查询出来的数据赋值给一个定义的变量

sql server exec 查询数据,将查询出来的数据赋值给一个定义的变量 declare @num int, @sqlnum nvarchar(500) set @sqlnum=N''; set @sqlnum =N'select @a=max(SINGLE_CORE_COUNT) from SFC_MODULE_STACKING_DATA where '+@strsql; exec sp_executesql @sqlnum,N'@a int output',@a=@num output