如何批量导出主键的创建脚本
批量(部分迁移)sqlserver2008 数据表迁移
方案:
1.批量的数据表已经导入到另外的数据库中,
但是导入的数据表没有原来数据库中的主键、默认值
如何批量处理主键或默认值?(sql2000的导入导出向导中仿佛有这个选项的,sql2008莫非退步了??)
如果能够批量生成如下的原来的主键脚本就可以了
ALTER TABLE [dbo].[uld_packbak] ADD CONSTRAINT [PK_uld_packbak] PRIMARY KEY CLUSTERED
(
[bakid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO(尝试过跟踪客户端的企业管理器,看看Create到 [文件]是不是会执行一些系统存储过程来生成的,估计是BCP跟不到)
2.创建数据库脚本,在新数据库执行后,有表结构,主键,默认值
但是没有数据,用SQL脚本插入很麻烦,因为每表都有自动Int数据类型,字段名太多,不好使用游标循环
[解决办法]
-- 建测试表create table houyichong(id1 int not null, id2 int not null, de varchar(10) constraint pk_houyichong primary key(id1,id2) )-- 动态产生脚本declare @tab varchar(200),@sql varchar(5000)select @tab='houyichong'select @sql='alter table ['+@tab+'] add constraint ['+name+'] 'from sys.objectswhere parent_object_id=object_id('houyichong')select @sql=@sql+' primary key('+(select cast((select name+','from (select c.namefrom sys.indexes ainner join sys.index_columns bon a.[object_id]=b.[object_id]inner join sys.columns con b.[object_id]=c.[object_id]and b.index_column_id=c.column_idwhere a.[object_id]=object_id(@tab)and a.is_primary_key=1) tfor xml path('')) as varchar(20)))select @sql=left(@sql,len(@sql)-1)+') '-- 打印print @sql--> 结果alter table [houyichong] add constraint [pk_houyichong] primary key(id1,id2) -- 执行exec(@sql)