如何使用 Visual Studio 数据库项目用静态的、源代码控制的数据填充数据库?我已经尝试了以下所有三种策略,发现每一种都比上一种更好。我正在使用但对策略 3 并不完全满意。您有其他选择吗?
-- 优点:直截了当
-- 缺点:slooooooow
-- 缺点:后续部署必须先删除静态数据或检查数据不存在 => 低效
-- 优点:比插入语句快得多
-- 优点:可以利用 SSMS 编辑表功能
-- 缺点:每个批量插入语句都需要数据文件的完全限定文件名,因此如果数据文件位于我的机器上的“C:\Projects\Dev\Source\foo.dat”,那么远程开发机器也必须将它们放在该位置或批量插入语句失败
-- 缺点:在后续部署中执行批量插入语句之前必须删除现有的静态数据
-- 优点:似乎 sql merge 对这个问题有完美的语义
-- 缺点:此策略的逻辑在每个文件中重复
-- 缺点:表定义在 sql 合并文件中作为临时表重复
有没有更好的替代策略?我放弃了策略 1,因为它太慢了。由于完全限定的文件名问题,我不喜欢策略 2。我对策略 3 感到满意但并不激动。是否有最佳实践?
最佳答案
在您的 insert.sql 脚本中,您可以在 [__RefactorLog] 表(这是部署使用的系统表)中放置一个 GUID,并在插入您的数据之前检查此 GUID 是否存在,如下所示:
:setvar SOMEID "784B2FC9-2B1E-5798-8478-24EE856E62AE"//在 VS2010 中使用 Tools\CreateGuid 创建 guid
如果不存在 (SELECT [OperationKey] FROM [dbo].[__RefactorLog] where [OperationKey] = '$(SOMEID)')
开始
...
INSERT INTO [dbo].[__RefactorLog] ([OperationKey] ) values( '$(SOMEID )' )
结尾
然后,仅当数据不存在或需要时才插入数据(通过更改 Guid)。
关于visual-studio-2010 - 使用 Visual Studio 2010 数据库项目填充静态数据的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279902/