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 TRAN
13
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_off
17 FETCH NEXT FROM cur_fk_off INTO @script
18 WHILE @@FETCH_STATUS = 0
19 BEGIN
20     EXEC(@script)
21     FETCH NEXT FROM cur_fk_off INTO @script
22 END
23 CLOSE cur_fk_off
24 DEALLOCATE cur_fk_off
25
26 --清空所有表
27 DECLARE cur_tabs CURSOR FOR SELECT ‘TRUNCATE TABLE [dbo].[‘ + name + ‘]‘ FROM sys.tables;
28 OPEN cur_tabs
29 FETCH NEXT FROM cur_tabs INTO @script
30 WHILE @@FETCH_STATUS = 0
31 BEGIN
32     EXEC(@script)
33     FETCH NEXT FROM cur_tabs INTO @script
34 END
35 CLOSE cur_tabs
36 DEALLOCATE cur_tabs
37
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_on
44 FETCH NEXT FROM cur_fk_on INTO @script
45 WHILE @@FETCH_STATUS = 0
46 BEGIN
47     EXEC(@script)
48     FETCH NEXT FROM cur_fk_on INTO @script
49 END
50 CLOSE cur_fk_on
51 DEALLOCATE cur_fk_on
52
53 --清除缓存
54 DROP TABLE #FK_ON
55
56 COMMIT TRAN
57 GO
时间: 2024-10-02 05:26:37

SQL Server 数据库初始化准备脚本的相关文章

Sql Server数据库常用Transact-SQL脚本

数据库 1.创建数据库 USE master ; GO CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log, FILENAME = 'C

简单sql server数据库自动还原脚本

创建脚本文件创建bat文件,在windows中添加定时任务,每天定时执行脚本就行huanyuan.sql:脚本文件db.log :日志文件 原文地址:http://blog.51cto.com/wumingfeixue/2096530

从SQL Server数据库转到Oracle数据库的数据脚本处理

在我们很多情况下的开发,为了方便或者通用性的考虑,都首先考虑SQL Server数据库进行开发,但有时候客户的生产环境是Oracle或者其他数据库,那么我们就需要把对应的数据结构和数据脚本转换为对应的数据库,数据结构一般来说,语法都遵循了SQL92的标准,或者我们根据不同的PowerDesigner文件进行生成对应的结构脚本即可,但是实际数据的脚本我们就需要进行一定的处理,以及文本的替换处理了,本文结合Notepad++的文本正则表达式替换,实现一些如日期较为特殊的数据脚本调整,把它从SQL S

在打包程序中自动安装SQL Server数据库 .

原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”.在“名称”框中键入 “setup1”. 单击“确定”关闭对话框. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开. 在“属性”窗口中,选择 ProductName 属性,并键入”亿万电器成套报价系统”. 2.在安装项目中创建

微软ASP.NET站点部署指南(11):部署SQL Server数据库更新

1. 综述 本章节展示的是如何向完整版SQL Server 数据库部署一个数据库升级.与第9章的数据库升级部署有所不同(第9章是部署到SQL Server Compact数据库). 提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面. 2. 给表添加新列 这个小节,做一个数据库修改和相应的代码更新,在部署到测试和生产环境之前,先在Visual Studio 里测试.修改内容是给Instructor 实体添加一个OfficeHour

SQL Server数据库字段类型说明

目前Sql Server 数据库一共有X个字段类型,大体分为9类,分别是字符串类型.二进制码字符串数据类型.Unincode字符串数据.整数类型.精确数据类型.近似值浮点数值数据类型.日期时间数据类型.货币数据类型.特殊数据类型.当然Sql Server还提供用户自定义的数据类型,但在我这篇不做讨论. 字符串类型 Char char数据类型用来存储指定长度的定长非统一编码型的数据.当定义一列为此类型时,你必须指定列长.当你总能知道要存储的数据的长度时,此数据类型很有用.例如,当你按邮政编码加4个

5、SQL Server数据库

SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步->默认实例->混合模式->输入sa密码->实例账号添加当前账号即可. 如果想要其他机器访问这台机器的sqlserver,需要使用windows防火墙中的入站规则,端口写1433. 二.SQL Server配置管理器 包含各个sql服务,连接数据库时,务必保证sql server服务已开

[转]C#操作SQL Server数据库

转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用: 第三,对SQL或存储过程执行后返回的“结果”进行操作. 对返回“结果”的操作可以分为两类: 一是用SqlDataReader直接一行一行的读取数据集: 二是DataSet联合SqlDataAdapter来操作数据库. 两者比较: SqlDataRead

SQL Server数据库空间管理 (1)

数据库经常遇到的问题: 1).数据库文件空间用尽  2).日志文件不停增长 3).数据库文件无法收缩  4).自动增长和自动收缩 本系列就以上面的4个问题入手分析并总结数据库空间的管理方法.   1.文件的分配方式以及文件空间检查方法 首先,你在你的数据库中运行sp_spaceused;之后会看到当前数据库的使用空间信息:这个命令也就会将大概的数据库空间信息给你展现出来,并不能查看每个数据文件和日志文件的使用情况:其中对于数据库tempdb来说里面存储的临时数据对象,这个命令是统计不到的.我们知