我在这里错过了什么吗?似乎在VS2010中在数据库项目中创建新表的唯一选项是:
将表对象创建为文件,然后将所有约束(默认值)创建为单独的文件,然后将每个索引创建为单独的文件,将主键创建为单独的文件并依次打开...
要么
使用SSMS中的表设计器创建整个表模式,然后使用模式比较工具为表的每个元素创建单个SQL语句的单个文件,并将每个代码块复制到VS中新创建的文件中.
2年前问了这个问题,我希望答案已经改变了.请告诉我VS2010中的数据库项目有一个隐藏的表设计器,我忽略了它.
我有一个用于Web应用程序的数据库项目,目前我已将其配置为在部署期间可能发生数据丢失时失败.我觉得这样更安全.但是我遇到了一个问题.我实际上需要在可能的数据丢失的情况下对某些事情进行部署更改,即缩短列长度,实际上什么都不会被删除,但系统认为会这样做.
我有两个问题.
第一个是这样的:除了启用或禁用捕获所有之前或之后,是否有任何方法可以更精细地控制此过程,即指定列可以放弃或缩短?有没有办法更精细地控制这个过程?
第二个是,你们如何处理这些情况?最初我曾希望添加一个预部署脚本来删除列就足够了,但是它们似乎也会在这些文件中捕获等等.
我们一直在使用Visual Studio数据库项目来维护项目的当前架构,这对于我们在将数据库架构引入新开发机器方面效果很好,但我们还没有用它来升级环境.以前我们使用迁移脚本将您从初始版本带到下一版本,依此类推,直到您处于当前版本,但现在我们希望利用数据库项目的强大功能.
我最近读了Barclay Hill的两篇帖子
在部署期间管理数据运动(第1部分)
在部署期间管理数据运动(第2部分)
其中介绍了从一个版本转到另一个版本时如何进行部署前后脚本,我们已经习惯了很好的效果,但是我现在陷入了一些我无法解决的问题,并感到我错过了.我们有两个不同版本的数据库,但迁移脚本不适用于两者中的较旧版本.以下是我们场景的简化版本.
表
1 ColumnABC CHAR(1)
表1
ColumnXYZ INT
从版本1到版本2的数据移动
预部署脚本检查数据库所处的版本,如果版本为1,则将ColumnABC中的数据放入临时表中.
部署后脚本检查我们现在是否为版本2,并检查是否存在在预部署脚本中创建的临时表,并在将char转换为int后将其放入新列ColumnXYZ中.
表1
Column123 INT
当我们将数据库从版本1升级到版本2然后升级到版本3时,一切正常.但是,如果我们在版本1上有一个数据库并希望跳转到版本3,则部署后脚本将失败,因为没有ColumnXYZ,因为它现在是Column123.
在旧的迁移方法中,这不会是一个问题,因为部署逐个遍历每个版本,但这不是数据库项目的工作方式.还有其他人经历过这个吗?你是如何处理它并让我错过了一些明显的东西?
sql-server data-migration database-project visual-studio-2010
我在Visual Studio 2012中使用SQL Server数据库项目,在比较和生成更新脚本时遇到以下问题:
在Visual Studio中,我添加了一个具有默认约束的列,例如:
[NewColumn] NVARCHAR(50) CONSTRAINT [DF_ExistingTable_NewColumn] NOT NULL DEFAULT N''
Run Code Online (Sandbox Code Playgroud)
不幸的是,默认约束的名称在以下情况下不会出现:
创建的更新脚本包含以下脚本(无约束名称):
ALTER TABLE [dbo].[ExistingTable]
ADD [NewColumn] NVARCHAR (50) DEFAULT N'' NOT NULL;
Run Code Online (Sandbox Code Playgroud)
这似乎是一个重大的疏忽,所以我想知道在哪里找到魔术开关在所有数据库操作中包含默认约束的名称.
sql-server constraints database-project schema-compare visual-studio-2012
看起来好像Visual Studio Database Project没有解析SQLCMD变量进行模式比较.
我所有的同义词都是这样的
CREATE SYNONYM [dbo].[addressesExtDB] FOR [$(ExtDB)].[dbo].[addresses];
Run Code Online (Sandbox Code Playgroud)
但是它们会被报告为与数据库不同.
当我使用正确'Specify SQLCMD Variabeles...'的-settings 进行模式更新时,将var ExtDB设置为'ExtDBnn'结果Synonym,数据库被正确设置为:
CREATE SYNONYM [dbo].[addressesExtDB] FOR [ExtDBnn].[dbo].[addresses];
Run Code Online (Sandbox Code Playgroud)
重新比较操作再次将所有同义词错误地显示为不同.因此比较应该解析sqlcmd-variabeles并使用结果与数据库进行比较.我是否想念这样做的选项,或者您是否遇到过同样的问题并找到了某种解决方案?
我们有一个包含三个数据库项目的解决方案。所有三个生成的 dacpac 都按顺序部署,但由于某种原因,其中一个 dacpac 不运行部署后脚本。
我们正在使用 sqlpackage 来创建一个 diffscript,并且 diffscript确实正确地包含了部署后的语句......这里是一个片段
IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT N'The transacted portion of the database update succeeded.'
COMMIT TRANSACTION
END
ELSE PRINT N'The transacted portion of the database update failed.'
GO
DROP TABLE #tmpErrors
GO
/*
Post-Deployment Script Template
--------------------------------------------------------------------------------------
This file contains SQL statements that will be appended to the build script.
Use SQLCMD syntax to include a file in the post-deployment script. …Run Code Online (Sandbox Code Playgroud) sql-server database-project visual-studio-2012 sql-server-data-tools
我想在现有表中删除一列.当我只是从表的创建脚本中删除它时,它将导致部署错误(数据丢失...).我想允许(在这种情况下)列丢弃.你会怎么做?
我正在尝试根据配置(调试/发布等)设置SQLCmd变量,但配置下拉列表显示为灰色(参见下图).对于Dev环境,我希望SQLCmd变量为Stage,对于Release环境,Prod.
如果不进入属性,我无法想出一个简单的方法.我们有9个项目,每个项目约6个变量.每次我们进行模式比较时,我们都必须手动更改变量,这非常繁琐.
我们的发布脚本适用于不同的环境,它只是设置模式比较,这使得它非常耗时.

我正在使用EF6.0并使用SQLServerDatabaseProject实现我的数据库.我想使用EF迁移工具进行数据库迁移.但由于我在DbProject上有我的数据库,我希望我的所有迁移文件都是SQLFiles(而不是c#)所以我想知道EF是否支持这个功能,如果没有,是否可以编写一个新的Migration类来保存EF功能但这样工作?
还请考虑我不希望EF生成我的迁移,但我希望能够使用其他迁移命令,例如update-database和...
==关于问题的更多细节==
我不想让c#类加载我的sql文件.必须直接保存sql文件以进行上下迁移,并将其视为与DbMigration类完全相同.迁移目录的一个简单示例是这样的:
Migrations
-> up
-> 201510060807125_alter-course-change-family.sql
-> 201510060813136_alter-course-add-mark-column.sql
-> down
-> 201510060807125_alter-course-change-family.sql
-> 201510060813136_alter-course-add-mark-column.sql
Run Code Online (Sandbox Code Playgroud) 是否可以使用visual studio Sql Server数据工具数据库项目为不同的发布配置文件部署不同的种子数据集?
我们知道您可以使用部署后脚本部署种子数据.我们知道您可以使用发布配置文件工具部署到不同的环境.我们不知道的是如何将不同的种子数据部署到不同的环境中.
我们为什么要这样做?
database-project visual-studio seeding publish-profiles sql-server-data-tools