首页 > 代码库 > SQL Server 数据库初始化准备脚本
SQL Server 数据库初始化准备脚本
通常我们在项目部署前都会写一份数据库初始化脚本。由于数据库外键的限制,我们需要按照数据引用顺序添加初始记录,这个整理过程相当麻烦。
因此写了以下脚本,原理是先去掉所有外键,然后执行一次清空,然后添加数据,最后恢复外键。
网上也有暂时禁用外键添加数据的方法,但由于SQL Server在有外键的情况下,不能使用TRUNCATE TABLE语句,因此暂时禁用外键时,只能使用DELETE语句清除无用数据。如果觉得删除外键不安全,也可以考虑将以下脚本修改为禁用外键的方式运行。
脚本在 SQL Server 2005、SQL Server 2008 R2、SQL Server 2012 上测试过,都没有问题。
1 SET NOCOUNT ON; 2 3 DECLARE @script NVARCHAR(255); 4 5 --缓存所有外键 6 SELECT OBJECT_NAME(fk.constraint_object_id) AS name, OBJECT_NAME(fk.parent_object_id) AS ptab, pc.name AS pcol, OBJECT_NAME(fk.referenced_object_id) AS rtab, rc.name AS rcol 7 INTO #FK_ON 8 FROM sys.foreign_key_columns fk 9 LEFT JOIN sys.columns pc ON fk.parent_column_id = pc.column_id AND fk.parent_object_id = pc.[object_id]10 LEFT JOIN sys.columns rc ON fk.referenced_column_id = rc.column_id AND fk.referenced_object_id = rc.[object_id];11 12 BEGIN TRAN13 14 --删除所有外键15 DECLARE cur_fk_off CURSOR FOR SELECT ‘ALTER TABLE [dbo].[‘ + OBJECT_NAME(parent_object_id) + ‘] DROP CONSTRAINT ‘ + name FROM sys.foreign_keys;16 OPEN cur_fk_off17 FETCH NEXT FROM cur_fk_off INTO @script18 WHILE @@FETCH_STATUS = 019 BEGIN20 EXEC(@script)21 FETCH NEXT FROM cur_fk_off INTO @script22 END23 CLOSE cur_fk_off24 DEALLOCATE cur_fk_off25 26 --清空所有表27 DECLARE cur_tabs CURSOR FOR SELECT ‘TRUNCATE TABLE [dbo].[‘ + name + ‘]‘ FROM sys.tables;28 OPEN cur_tabs29 FETCH NEXT FROM cur_tabs INTO @script30 WHILE @@FETCH_STATUS = 031 BEGIN32 EXEC(@script)33 FETCH NEXT FROM cur_tabs INTO @script34 END35 CLOSE cur_tabs36 DEALLOCATE cur_tabs37 38 --写入初始化数据39 --INSERT INTO ...40 41 --重建所有外键42 DECLARE cur_fk_on CURSOR FOR SELECT ‘ALTER TABLE [dbo].[‘ + ptab + ‘] ADD CONSTRAINT ‘ + name + ‘ FOREIGN KEY ([‘ + pcol + ‘]) REFERENCES [dbo].[‘ + rtab + ‘] ([‘ + rcol + ‘])‘ FROM #FK_ON;43 OPEN cur_fk_on44 FETCH NEXT FROM cur_fk_on INTO @script45 WHILE @@FETCH_STATUS = 046 BEGIN47 EXEC(@script)48 FETCH NEXT FROM cur_fk_on INTO @script49 END50 CLOSE cur_fk_on51 DEALLOCATE cur_fk_on52 53 --清除缓存54 DROP TABLE #FK_ON55 56 COMMIT TRAN57 GO
本文出自于 飞扬的尘埃的博客 转载请注明出处。
SQL Server 数据库初始化准备脚本
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。