如何使用Visual Studio数据库项目使用静态的源控制数据填充数据库?我已经尝试了以下所有三种策略,发现每一种策略都比上一次更好.我使用但不完全满意策略3.你有另一种选择吗?
将插入脚本放在"数据生成计划"文件夹中.引用"Script.PostDeployment.sql"文件中的脚本以将其包含在部署过程中.
- 优点:直截了当
- 缺点:slooooooow
- 缺点:后续部署必须首先删除静态数据或检查数据是否存在=>效率低下
使用最方便的方法(例如,可能是SSMS编辑表功能)第一次将数据插入数据库.使用bcp命令行实用程序提取该数据,以创建一堆数据文件并将其添加到项目中.创建"Scripts.PostDeployment.sql"文件中引用的脚本,该脚本为每个数据文件执行"批量插入"语句.
- 优点:比插入语句快得多
- 优点:可以利用SSMS编辑表功能
- 缺点:每个批量插入语句都需要数据文件的完全限定文件名,所以如果数据文件位于我的机器上"C" :\ Projects\Dev\Source\foo.dat"然后远程开发机器也必须在那个位置或批量插入语句失败
- 缺点:必须删除现有的静态数据,然后在后续部署中执行批量插入语句
在部署期间创建临时表以保存静态数据,并使用sql merge语句将这些表与目标表同步.见任的这些博客文章.
- 优点:似乎sql merge对问题有完美的语义
- 缺点:这个策略的逻辑在每个文件中重复 - 缺点:表定义作为sql合并文件中的临时表重复
是否有更优越的替代战略?我放弃了策略1,因为它太慢了.由于完全限定的文件名问题,我不喜欢策略2.我对战略3感到满意但并不激动.是否有最好的做法?
我正在查看VS2010中的数据库项目,我的想法是我想要一些东西来跟踪数据库模式(在源代码控制中)以及生成"新安装"脚本和更改脚本的能力.
当我创建一个新的数据库项目向导并导入我现有的数据库模式时,它将不会"构建".我收到错误:
SQL03006:用户:[scanner]有一个未解析的对Login [scanner]的引用.
生成此错误的SQL:
CREATE USER [scanner] FOR LOGIN [scanner];
用户"scanner"是我导入的数据库中定义的登录名.我不知道它给我带来了什么,谷歌也没有多大的投入.有任何想法吗?
我在Visual Studio 2013中有一个数据库项目,其后部署脚本使用SQLCMD模式.
我遇到的问题是每次打开项目时项目默认为非SQLCMD模式.这意味着每次打开项目时,错误列表都会出现错误,例如"语法不正确':'." 直到开发人员打开部署脚本并单击SQLCMD模式按钮.
有没有办法默认保持SQLCMD模式,所以开发人员不必每次打开项目时都这样做?
我在TFS Build中设置了我的.NET项目.它在本地构建良好,但我在服务器上收到此构建错误:
找不到导入的项目"C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets".确认<Import>声明中的路径是正确的,并且该文件存在于磁盘上.
我不知道它是什么,即使是谷歌搜索并没有多大帮助.我的解决方案有一些数据库项目 这里有什么问题以及我如何解决它?
在Visual Studio 2012中使用数据库项目时,在添加或编辑表时,VS默认为"设计视图"窗格.虽然您可以在分屏模式下工作,但T-SQL窗格默认为底部窗格.
由于我更喜欢直接使用T-SQL而不是设计器,因此我不断切换到使T-SQL窗格成为最顶层的编辑器以便使用该对象.不幸的是,VS不记得这个偏好,因此我每次使用表时都必须更改以使T-SQL窗格显示在顶部而不是设计器窗格下方.
我已经查看工具 - >选项下是否有设置来控制此行为,但到目前为止,我一直无法找到这样做的设置.我也对该主题进行了一些谷歌搜索,但没有找到任何有用的特殊情况.
这对我来说比其他任何事情都更令人烦恼,但是当我发现自己不断切换窗格时,我想知道是否有人知道某个设置,无论是在VS内还是注册表或其他配置文件都会迫使VS记住我的偏好或者默认使用Designer窗格顶部的T-SQL窗格?
当我尝试发布数据库项目时,在创建发布预览...时,我收到此错误:无法找到文件'C:... [DatabaseProjName]\sql\debug [DatabaseProjName] .dacpac'.我如何获得此文件?
我最近试了一下(SQL 2008版),我发现它们还可以.好吧,唯一的问题是该向导不够智能,无需先删除所有数据即可更新数据库结构.这就是为什么这些项目没有在实践中使用?
实际上从来没有见过任何人使用它们或者根本没有提过它们.除非你明确地寻找它,否则在博客和论坛中也没什么可看的.
他们怎么了?
database-design database-project visual-studio-2008 visual-studio
我们有两个数据库项目,x和x_audit.x有参考x_audit.
x_audit部署很好,但在尝试部署时x我们得到错误:
The reference to external elements from the source named x_audit.dbschema could not be resolved, because no such source is loaded.
相同的文件可以很好地部署到2005数据库,我们只在部署到2008时遇到此错误.如果它有任何区别,这是升级现有数据库而不是创建新数据库.它曾经在2005年和2008年都运作良好,不知道发生了什么变化.
谢谢
我想从数据库和我的数据库项目创建一个delta脚本.数据库作为源和数据库项目作为目标.该Update按钮工作正常,没有任何错误,我的错误列表只包含此警告:
源的登录名没有VIEW ANY DEFINITION权限.如果目标是数据库,则比较将限于数据库范围的元素.
此权限:https://technet.microsoft.com/en-us/library/ms175808(v = sql.105).aspx
如何generate Script在Visual Studio Enterprise 2017中激活Button?我真的需要访问脚本生成的元数据吗?
(编辑):
即使有这个权限也无效.但是我可以在比较两个数据库时生成脚本.
我们有几个同义词用于引用单独数据库中的表(位于同一服务器上).
实际的同义词很好,但引用所述同义词的存储过程/用户定义函数显示以下错误:
Error 13 SQL03006: Column: [dbo].[GetCocosIndexSearched].[User ID] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [dbo].[AuditType].[e]::[LOGIN_ID], [dbo].[EMPLOYEES].[e]::[LOGIN_ID], [dbo].[EMPLOYEES].[LOGIN_ID] or [dbo].[SearchCIBirthsRequest].[e]::[LOGIN_ID]. C:\VSTS\Corporate\WARS Audit\MAIN\Source\RBDM.Audit.Database\Schema Objects\Schemas\dbo\Programmability\Functions\GetCocosIndexSearched_1.function.sql 21 5 RBDM.Audit.Database
Run Code Online (Sandbox Code Playgroud)
[dbo].[GetCocosIndexSearched]是一个函数,[dbo].[EMPLOYEES]是同义词.
这些都在实际数据库本身中工作正常 - 问题仅在于数据库项目.我已经尝试添加对单独数据库的引用(通过新的数据库项目或数据库项目架构),但随后会出现与同义词和引用表的冲突问题:
Error 7 SQL04105: The model already has an element that has the same name dbo.EMPLOYEES. C:\VSTS\Corporate\WARS Audit\MAIN\Source\RBDM.Audit.Database\Schema Objects\Schemas\dbo\Synonyms\EMPLOYEES.synonym.sql 2 1 RBDM.Audit.Database
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?在另一个stackoverflow帖子中提到了一个解决方法,该文章讨论了如何放置创建脚本Script.PostDeployment.sql- 对我来说听起来有点过于讨厌.