我刚刚将现有的 SQL Server 2008r2 生产数据库导入到 VS 2013 数据库项目中。
我现在遇到了一些错误
Error SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].
Run Code Online (Sandbox Code Playgroud)
我真的不需要我的 VS DB 项目来管理用户,但我担心如果它们不存在,它会在部署时尝试删除它们。
文件本身生成为
CREATE USER [mydbuser] FOR LOGIN [mydbuser];
Run Code Online (Sandbox Code Playgroud)
或者
CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];
Run Code Online (Sandbox Code Playgroud)
错误标记显示它专门用于Login。由于这是一个系统级对象,我可以理解它超出了 db 项目的范围。
我是否更喜欢将它们全部更改为
CREATE USER [mydbuser] WITHOUT LOGIN;
Run Code Online (Sandbox Code Playgroud)
或将CREATE LOGIN子句添加到每个文件的开头?
删除登录引用似乎更简单,而完全删除用户将是最简单的。
我想确保我按照预期的方式使用该工具。将其中任何一个重新发布到生产环境中会不会有任何问题?通过项目添加用户/登录的正确程序是什么?
我有一个Visual Studio 2013数据库项目这需要一个修改版本的FASTJSON作为参考。我在参考属性中选择了 Generate DDL,如下图所示:

在 .sqlproj msbuild 文件中:
<Reference Include="fastJSON">
<HintPath>..\..\fastjson\output\net40\fastJSON.dll</HintPath>
<GenerateSqlClrDdl>True</GenerateSqlClrDdl>
</Reference>
Run Code Online (Sandbox Code Playgroud)
但是 bin/debug/Project.sql 不包含CREATE ASSEMBLY fastJSON . . .. 手动添加程序集工作,然后我的项目将部署和运行。我该怎么做才能让 Visual Studio 部署我的程序集?
我有一个包含两个数据库项目的 VS 2013 解决方案。
其中之一,我们称之为“worker”,应该部署到大约 10 个不同的生产服务器上。
另一个应该作为“控制器”实例工作,基本上应该在 10 台生产服务器上的“工作人员”数据库上运行不同的存储过程。
因此,为了实现这一点,我在“控制器”内编写了 10 个链接服务器对象的脚本,并调用“工作器”数据库中的不同 SP。
以下是链接服务器脚本的示例:
EXEC sp_addlinkedserver @server = N'PROD1', @srvproduct=N'SQLSERVER', @provider=N'SQLNCLI', @datasrc=N'1.2.3.4\prod1'
GO
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'PROD1',@useself=N'False',@locallogin=NULL,@rmtuser=N'aaaaa',@rmtpassword='aaaaa'
GO
EXEC sp_serveroption @server=N'PROD1', @optname=N'rpc', @optvalue=N'true'
GO
EXEC sp_serveroption @server=N'PROD1', @optname=N'rpc out', @optvalue=N'true'
GO
Run Code Online (Sandbox Code Playgroud)
到目前为止,效果很好,并且链接服务器是在控制器 SQL Server 上创建的,我可以使用它们。
但是:
在 SSDT 项目/解决方案中,每当我使用链接服务器对象时,我都会收到损坏的引用。当然,模式不知道链接服务器名称,因为它们仅位于上述脚本中的字符串常量中。
示例:(我自己翻译的信息,不保证完全正确)
警告 14 SQL71562:“过程:[dbo].[SP1]”包含对对象 [PROD1].[db1].[dbo].[SP1] 的未解析引用”。
所以我的问题是,我有从控制器数据库模式到“worker”数据库模式的引用,但我无法使用/插入数据库引用,因为我使用多个不同的引用(10 个生产服务器)来“访问”工作人员的架构...我不想使用“OtherServer”选项向我的项目添加 10 个数据库引用(即使可以,我猜它也不允许向同一数据库项目添加 10 个引用。 ..)
我有一种感觉,应该可以在解决方案中以正确的方式处理链接服务器对象,但我不知道如何解决。
我尝试了亚伦的同义词建议,但是一旦我使用链接服务器的名称,就会遇到同样的问题,导致名称“后面”出现未知对象。
我编辑了问题以使问题更加清晰,并希望任何人都有想法,因为我想要一个干净的解决方案,没有数百条警告消息。
visual-studio sql-server-2008-r2 linked-server ssdt database-projects
我将 SQLPackage.exe 与数据库发布配置文件结合使用,将数据库更改部署到 DEV 和 QC 实例。我的数据库处于简单恢复模式。但是当我使用 SQLPackage 部署更改时,它将它们恢复为完全恢复模式。
这就是我正在使用的,
"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /Action:Publish /SourceFile:"FILE PATH TO .DACPAC" /Profile:"PUBLISH PROFILE.XML"
如果我使用 Visual Studio 使用相同的发布项目来部署项目更改,则会发生同样的情况。
我在这里缺少什么?据我所知,Profile 中没有这样的标志。这是 SQLPackage 的预期行为吗?