分享:sp_table_copy 根据旧表创建新表,并去掉IDENTITY属性。

USE master
go 

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
IF OBJECT_ID('sp_table_copy','P') IS NOT NULL 
DROP PROC sp_table_copy
go 
CREATE PROCEDURE sp_table_copy
    (
      @table NVARCHAR(128) ,
      @table_new NVARCHAR(128),
      @is_identity CHAR(1) = 'N' 
    )
AS 
    IF OBJECT_ID(@table, 'U') IS NULL 
        BEGIN 
            SELECT  '不存在表:' + @table AS return_result 
            RETURN
        END 
    IF @is_identity NOT IN ('Y','N')
        BEGIN 
            SELECT  '@is_identity:只能是Y或N'   AS return_result 
            RETURN
        END 
    DECLARE @sql NVARCHAR(MAX)
    SET @sql = ' SELECT TOP (0) '
    IF @is_identity = 'N'
    SET @sql = @sql
        + STUFF(( SELECT    ',' + ( CASE WHEN is_identity = 1 THEN ' 0 + ' + name + ' AS ' + name + '' ELSE '' + name + '' END )
                  FROM      sys.columns
                  WHERE     object_id = OBJECT_ID(@table, 'U')
                FOR
                  XML PATH('')
                ), 1, 1, '') + CHAR(13) + CHAR(10) + ' INTO ' + @table_new + CHAR(13) + CHAR(10) + 
                ' FROM ' + @table + ''
                    ELSE  
        SET @sql = @sql
        + STUFF(( SELECT    ',' + '' + name + '' 
                  FROM      sys.columns
                  WHERE     object_id = OBJECT_ID(@table, 'U')
                FOR
                  XML PATH('')
                ), 1, 1, '') + CHAR(13) + CHAR(10) + ' INTO ' + @table_new + CHAR(13) + CHAR(10) + 
                ' FROM ' + @table + ''
                          
    PRINT @sql 
    IF object_id(@table_new,'U') IS NULL 
    EXEC sp_executesql @sql 
	
GO
EXEC sp_MS_marksystemobject 'sp_table_copy'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值