领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

用VS去创建SQL Server数据库项目_vs2019创建数据库和数据表

nixiaole 2025-02-18 12:43:25 知识剖析 15 ℃

学习Visual Studio中可用的SQL Server数据库项目(模板):

  • SQL Server数据库项目简介
  • 创建新的SQL Server数据库项目
  • 从项目的现有数据库、.sql脚本文件或数据层应用程序(.bacpac)导入数据库模式
  • 发布以在SQL server中创建新数据库

数据库在任何应用程序中都扮演着非常重要的角色,当表、视图、存储过程的数量增加时,管理项目就变得非常困难。

考虑这样的场景:多个开发人员正在为下一个版本的项目工作,其中一些人正在处理bug或添加新特性,这同样需要对数据库进行一些或许多更改。大多数情况下,开发人员会手动记录DB(数据库)的更改。有时他们会忽略一些在生产中造成成本的变化。在许多情况下,Dev、UAT和production DB是不同的,这也是识别差异的麻烦。

市场上有很多工具可以用来比较数据库,但都是昂贵的或付费的解决方案。

因此,在本文中,我们将讨论并学习Visual Studio中的SQL Server数据库项目with,它是免费的。

先决条件

Visual Studio(2013, 2015, 2017,或2019)和MS SQL Server。我使用VS 2019和SQL Server 2017 Developer进行演示。

介绍

您可以创建一个新的数据库项目,并从现有数据库、.sql脚本文件或数据层应用程序(.bacpac)导入数据库模式。然后,您可以调用用于连接数据库开发的相同的可视化设计器工具(Transact-SQL编辑器、表设计器),对脱机数据库项目进行更改,并将更改发布回生产数据库。还可以将更改保存为稍后发布的脚本。使用Project Properties窗格,您可以将目标平台更改为不同版本的SQL Server(包括SQL Azure)。

创建新的SQL Server数据库项目

打开Visual Studio并创建一个空白的解决方案,如下所示:

在解决方案下添加新项目

从左面板选择SQL Server和SQL Server数据库项目。为项目提供一个名称(这里,我将名称作为SampleAccount.)。该模板用于创建SQL server数据库。

下一步是从现有数据库导入数据库方案。

从项目的现有数据库、.sql脚本文件或数据层应用程序(.dacpac)导入数据库模式。

因此,右键单击项目并选择import。有三个选项:数据层应用程序(.dacpac)、数据库、脚本(.sql)。

在这里,我使用Database选项,因为我将从MS SQL数据库导入,如下所示。

现在您将看到如下所示的屏幕。此选项可用于提供连接字符串。有从本地、网络或Azure选择数据库的选项,因此您可以根据您的数据库选择该选项。或者,您可以输入服务器名称、身份验证类型和凭据直接连接到数据库服务器。然后选择要导入并保存在项目中的数据库。

接下来,我们必须设置导入设置。有一些选择,

  • 导入应用程序范围的对象:这将导入表、视图、存储过程以及对象。
  • 导入参考登录:与登录相关的导入。
  • 导入权限:这将导入相关权限。
  • 导入数据库设置:这将导入数据库设置。
  • 文件夹结构:在项目中为数据库对象选择文件夹结构的选项。
  • 每个文件夹的最大文件数:限制每个文件夹的文件数。

在我的例子中,我选择了如下所示的选项。

单击Start,将显示进度窗口,如下所示。

完成后,我们可以看到项目中的表、视图和存储过程,如下所示。

最后,我们成功地创建了SQL server数据库项目。现在我们可以使用这个项目从解决方案本身发布和创建新的数据集。

现在,我将展示如何从这个SQL server数据库项目在SQL server中发布和创建新数据库。

发布以在SQL server中创建新数据库

我们可以使用具有相同模式的SQL Sever数据库项目从Visual Studio中轻松地直接创建新的数据库。

右键单击项目并选择publish选项,如下所示。

提供连接

服务器名称、身份验证类型、凭据。如果要作为新数据库发布,则选择默认数据库或选择要发布的特定数据库。

您可以看到新数据库并发布SQL server数据库,如下所示。

让我们探索带有更多规则和选项的高级选项。

选项有:

部署的行为

  • 部署数据库属性。
  • 总是重新创建数据库。
  • 如果可能发生数据丢失,则阻塞增量部署。
  • 在单用户模式下执行部署脚本。
  • 部署前备份数据库。
  • 不要使用alter程序集语句来更新CLR类型。

此外,还有几个高级部署选项,如:使用目标排序、禁用和重新启用DDL触发器、不更改更改数据捕获对象、不更改复制对象、删除统计信息而不是源、包括复合对象、包括事务脚本、填充文件或文件组等几个选项,如下所示。

然后,在高级选项中单击ok并发布数据库。

现在,您的数据库已经在SQL server中创建,您可以登录到SQL server并进行检查,如下所示。

最后,我们成功地从Visual Studio、SQL server数据库项目中创建了一个数据库。

结论

在本文中,展示了如何在Visual Studio中创建SQL server数据库项目并导入SQL数据库。我们可以使用这个项目模板从Visual Studio本身导入开发数据库并最终发布到UAT、产品或其他服务器。此外,我们还探讨了数据库导入和发布过程中的一些高级选项。对于这个项目,我们有一些额外的有用选项或用例,比如比较和识别两个数据库(开发和生产)中的差异,然后我们可以生成更新的脚本,或者直接从项目中更新。

分享用sqlserver触发器实现某张表插入数据同时写到另外一张表案例

概述

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

某张表插入数据需要同时写到另外一张表,下面介绍下如何用sqlserver触发器来实现。


1、创建表结构

这里跟Oracle数据库的create table xx as select XX不一样

select * into LJPL_XX_LJYHXX_MID from LJPL_XX_LJYHXX WHERE 1=2;
select * into LJPL_XX_LJJHXX_MID from LJPL_XX_LJJHXX WHERE 1=2;
select * into LJPL_XX_RQFH_MID from LJPL_XX_RQFH WHERE 1=2;

2、创建触发器

这里要注意我分别用了AFTER和instead of两个用法。

且sqlserver的INSERTED代表插入后的数据,这个要比Oracle实用很多,因为Oracle触发器不能直接写全部字段,只能一个一个字段:new.字段名这种方式,麻烦很多。

--判断触发器是否存在
if exists(select * from sysobjects where name='trg_ljjhxx')
drop trigger trg_ljjhxx;
go

CREATE TRIGGER dbo.trg_ljjhxx ON dbo.LJPL_XX_LJJHXX AFTER INSERT AS BEGIN
 INSERT INTO LJPL_XX_LJJHXX_MID 
 SELECT * FROM INSERTED
 END go
?
--判断触发器是否存在
IF
 EXISTS ( SELECT * FROM sysobjects WHERE NAME = 'trg_rqfh' ) DROP TRIGGER trg_rqfh;
go CREATE TRIGGER dbo.trg_rqfh ON dbo.LJPL_XX_RQFH instead of INSERT AS BEGIN
 INSERT INTO LJPL_XX_RQFH_MID 
 SELECT * FROM INSERTED
 END go
?
--判断触发器是否存在
IF
 EXISTS ( SELECT * FROM sysobjects WHERE NAME = 'trg_ljyhxx' ) DROP TRIGGER trg_ljyhxx;
go CREATE TRIGGER dbo.trg_ljyhxx ON dbo.LJPL_XX_LJYHXX instead of INSERT AS BEGIN
 INSERT INTO LJPL_XX_LJYHXX_MID 
 SELECT * FROM INSERTED
 END go

3、测试

测试成功

INSERT INTO LJPL_XX_RQFH (
 [FID],
 ....
)
VALUES
 (
 N'00061017-16EE-4CED-806A-3EF8F3D47466',
 N'M810550000',
 N'黄伟波',
... 
 );
?
SELECT * FROM LJPL_XX_RQFH WHERE FID=N'00061017-16EE-4CED-806A-3EF8F3D47466'
最近发表
标签列表