Sql server 如何在VisualStudio中开发t-sql?

Sql server 如何在VisualStudio中开发t-sql?,sql-server,visual-studio-2013,sql-server-data-tools,Sql Server,Visual Studio 2013,Sql Server Data Tools,我们使用带SSDT的Visual Studio 2013主要用于对t-sql代码进行版本控制,因此sql是在开发服务器上开发的,然后我们使用模式比较将脚本传输到Visual Studio(并签入Git)。在部署之前(我们目前也使用模式比较),我们必须替换数据库和服务器引用(使用[$(数据库)]等)。如果我们在dev服务器中更改代码并再次比较,那么这样的SQLCMD变量将再次丢失。(我希望schema compare足够智能,可以保留SQLCMD变量,但我没有找到实现这一点的方法) 逻辑步骤是从一

我们使用带SSDT的Visual Studio 2013主要用于对t-sql代码进行版本控制,因此sql是在开发服务器上开发的,然后我们使用模式比较将脚本传输到Visual Studio(并签入Git)。在部署之前(我们目前也使用模式比较),我们必须替换数据库和服务器引用(使用[$(数据库)]等)。如果我们在dev服务器中更改代码并再次比较,那么这样的SQLCMD变量将再次丢失。(我希望schema compare足够智能,可以保留SQLCMD变量,但我没有找到实现这一点的方法)

逻辑步骤是从一开始就在VisualStudio中开发sql。但到目前为止,很难说服团队中的任何人这样做。可以在VS中编写sql并执行它,没有问题。也可以切换到SQLCMD模式并执行,好的。但是当你在VS中创建一个视图时,你必须写下一个create语句,当然这可以执行一次,但是在改变视图并再次执行create语句时会产生一个错误


所以我的问题是,是否有人有一些关于如何在VisualStudio中专门进行数据库开发的基本技巧。我们能够直接获得数据库引用和所有这些,但无法获得开发过程。

这是一个由来已久的挑战。多年来,我们一直试图使用定义好的数据项目,但遇到了一些问题,包括这些项目似乎随着Visual Studio的每个版本而发生了变化

现在,我们只使用数据项目与TFS集成,用于工作项管理和源代码控制。我们在VisualStudio中构建存储过程/视图的方法是使用drop/create模式编写每个脚本。我们的脚本还包含安全性(我们犯了使用默认模式的错误…如果我能回到过去,我们会隔离模式并执行基于模式的角色级安全性)

对于表模式,我们对版本化模板数据库进行模式比较

典型的存储过程如下所示:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_MyStoredProcedure]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[sp_MyStoredProcedure]
GO
CREATE PROCEDURE [dbo].[sp_MyStoredProcedure]
    @MyParameter int
AS
BEGIN
    -- Stored Procedure Guts
    select 1
END

祝你好运。。。最终,它只需要为您的团队工作。

SSDT已经足够成熟,可以使用它来创建脚本和部署更改,但与使用sqlpackage.exe进行部署相比,您应该放弃使用模式

该过程类似于:

-在vs/ssdt中编写代码 -生成生成dacpac的项目(在您的计算机或ci服务器上) -将dacpac部署到db实例,如果需要,可以使用变量,使db更新。使用sqlpackage.exe部署或生成可手动部署的脚本

这应该是非常直截了当的,但如果你对任何事情都不确定,请询问


Ed

几年来,我一直在使用VisualStudio数据库项目简化本地数据库的开发和部署。这里有一些提示

通常…

使用本地数据库实例:每个开发人员都应该在本地安装自己的数据库实例。所有脚本(表、视图、存储过程等)都应该在VisualStudio中开发。创建用于将项目部署到本地db实例的发布配置文件

使用发布功能:令人困惑的是,VisualStudio提供了部署和发布选项,它们最终完成了相同的任务。我建议使用justpublish,因为它在UI中更为突出,您可以创建配置文件来配置各种数据库实例的部署过程

使本地数据库保持最新:当开发人员在数据库项目中进行更改并将其签入源代码管理时,其他开发人员应签出这些更改并将项目重新发布到其本地数据库

创建与更改语句

您的所有语句都应该是Create语句。不需要Alter语句或存在性检查。一切都应该像第一次创建数据库对象一样编写脚本。部署或发布时,VS将知道是否为现有对象发出Alter语句

数据

一些想法:

  • 将数据编写为一系列Insert语句。将它们包含在数据库项目的部署后脚本中。但这可能会很乏味,而且容易出错

  • 保留包含所有测试数据的数据库备份。首次设置开发环境时,请从备份中创建数据库。对数据进行重大更改后,创建一个新的备份,并让开发人员从备份中重新创建数据库。在大多数情况下,如果备份与项目中定义的模式不同步,也可以——只需重新发布项目(确保关闭“重新创建数据库”设置,以便只发布差异,从而不会丢失数据)

  • 可能会有第三方工具来实现这一点,在这种情况下,它们值得一看

  • 为部署数据创建自己的解决方案。我的工作包括以下几点,工作非常出色(但需要大量时间和精力!):

  • 存储在XML文件中的所有数据-每个表1个文件-其结构类似于表
  • 一个可执行文件,用于读取XML文件,为每行数据生成SQL合并(或插入/更新)语句,并将其保存到SQL脚本中
  • 数据库项目中的预生成事件,用于运行可执行文件并将生成的SQL脚本复制到项目中的部署后脚本
  • 发布项目,数据将在部署后推送
测试/生产部署

发布功能:您可以为测试和生产环境创建发布配置文件。但是,它将包括部署前和部署后脚本,您将无法获得其他选项提供的多功能性

爱德·艾略特在回答中谈到了这些问题。优点:不需要V