当我为SQL 2012创建Visual Studio数据库项目并将其与现有数据库同步(使用比较模式)时,我还同步SQL服务器登录.Visual Studio为登录生成以下脚本:
CREATE LOGIN [my_user] WITH PASSWORD = 'somesecurepass'
Run Code Online (Sandbox Code Playgroud)
当我尝试在存在此登录的服务器上发布生成的SQL时,sqlcmd向我显示错误:
The server principal my_user already exists.
Run Code Online (Sandbox Code Playgroud)
当我查看Visual Studio生成的sql脚本时,我看到许多对象都包含在IF EXISTS语句中,但是CREATE LOGIN没有被包装!
我试图在项目的SQL脚本中手动包装它,但是然后项目没有构建,并且指向IF的错误:
SQL70001: This statement is not recognized in this context.
Run Code Online (Sandbox Code Playgroud)
现在,如何强制Visual Studio使用IF EXISTS检查生成登录创建脚本,并且不会丢失同步功能?
在Visual Studio 2013中,我创建了一个数据库项目并导入了现有数据库.起初一切都很好,项目构建和生成创建脚本.
但是,现在Visual Studio似乎认为存在SQL语法错误,返回了几个SQL46010: Incorrect syntax near:错误.这些都来自VS生成的代码 - 我没有写过任何代码.
例1:
ALTER ROLE [db_owner] ADD MEMBER [SomeUser];
SQL46010: Incorrect syntax near ADD.
Run Code Online (Sandbox Code Playgroud)
例2:
DECLARE @Foo NVARCHAR(7) = 'abcdefg';
SQL46010: Incorrect syntax near =.
Run Code Online (Sandbox Code Playgroud)
如果我将代码复制/粘贴到SSMS中,一切正常.
不幸的是,这些阻止了项目的构建,这意味着我无法发布.由于它们是错误而不是警告,我无法在项目设置中将它们设置为忽略.
我可以将问题文件的Build Action设置为None,但我需要在发布时包含这些文件.
我试过了:
我能找到的最接近的问题是2012年的这个MSDN线程,说明有一个错误的SSDT SQL解析器(这促使我尝试更新SSDT).
我在Visual Studio中有一个MS DataBase项目 - 在进行模式比较后,我正在尝试生成一个部署脚本,问题是我得到了数百个未解决的引用错误,例如以下两个:
Error 385 TSD03006: View: [auditing].[AuditedEntities] has an unresolved reference to object [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS]. D:\greatProject\Database\greatProject.Database\Schema Objects\Schemas\auditing\Views\AuditedEntities.view.sql 4 14 greatProject.Database
Error 387 TSD03006: View: [auditing].[AuditedEntities] 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: [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS].[C]::[CONSTRAINT_NAME], [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS].[CONSTRAINT_NAME] or [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS].[C]::[CONSTRAINT_NAME]. D:\greatProject\Database\greatProject.Database\Schema Objects\Schemas\auditing\Views\AuditedEntities.view.sql 5 69 greatProject.Database
Run Code Online (Sandbox Code Playgroud)
SPROCS在运行时从不会出现问题.是否有一种快速而肮脏的方法来解决这个问题?也许甚至可能通过关闭参照完整性检查?
我真的在努力管理基于Visual Studio 2010数据库项目的SQL Azure数据库的最佳方法.我认为使用VSDBCMD创建用于升级的差异脚本然后只需在SSMS中针对SQL Azure运行就足够了.但是,我得到了可怕的"无法确定目标数据库架构提供程序.部署无法继续." 错误.
在这一点上,我只是假设SQL Azure不支持VSDBCMD中的某些内容,反之亦然,我正在考虑其他方法.这是我正在考虑的方法:
好坏?还有其他想法吗?
编辑:我今天更新到Visual Studio 2010 SP1,发现Microsoft.Data.Schema.Sql.dll中有一个新的数据库架构提供程序:SqlAzureDatabaseSchemaProvider.但是,我无法确定如何真正使用这个坏男孩.现在,当我针对Azure数据库尝试相同的VSDBCMD脚本时,我得到:
源数据库架构提供程序Sql100DatabaseSchemaProvider无法转换为提供程序SqlAzureDatabaseSchemaProvider.部署无法继续.
我也尝试使用具有相同结果的Sql90提供程序.我甚至手动编辑了dbproj文件,并将DSP属性更改为SqlAzureDatabaseSchemaProvider.当我重新加载项目时,我得到:
数据库模式提供程序必须提供DataGenerationServices的实现.
有人试过VS 2010 SP1吗?
database-project azure visual-studio-2010 azure-sql-database
我使用Visual Studio 2010 Premium inc完全安装了Windows 7.SP 1.我刚刚安装了SQL Server 2012的开发人员版本.
我现在应该能够将Visual Studio 2010数据库项目转换为SSDT项目.根据这个technet博客文章,它应该像打开我的Visual Studio解决方案文件一样简单并遵循转换向导.问题是转换向导永远不会出现.此外,右键单击VS 2010数据库项目时,"转换为SQL Server数据库项目..."上下文菜单项不存在.
我可能在SQL 2012安装中遗漏了一些东西.问题是:什么?
我的SQL 2012安装配置:

database-project visual-studio-2010 sql-server-2012 sql-server-data-tools
我在Visual Studio 2013中创建了一个SQL Server数据库项目,并导入了从生产数据库中获取的DACPAC.当我尝试构建项目时,我得到了数百个SQL71501和SQL71561错误(这两个错误都是"未解析的对象引用").检查脚本问题是许多视图和存储过程使用三个部分名称:[database].[schema].[object].
每当遇到包含数据库项目所代表的数据库的三部分名称时,Visual Studio 2013似乎都会抛出此错误.例如,如果数据库项目代表数据库"MyDatabase",并且该项目中的SQL脚本包含类似的内容,SELECT t.Column1 FROM MyDatabase.dbo.MyTable t那么VS 2013将在构建项目时抛出SQL71501或SQL71561.
有没有办法抑制刚刚应用于当前数据库的未解决的引用错误?我仍然希望Visual Studio为未解析的外部数据库引用抛出错误.
编辑,更正:最初声明错误代码是SQL71501.但是,Visual Studio似乎会针对同一数据库的未解析引用抛出SQL71501和SQL71561错误.
我无法谷歌这个.
我们有一个现有的数据库项目(sql server).
添加了一些新文件(脚本).
我们有一个现有的服务器/数据库,其中需要在该上下文中运行一些新脚本.
在Visual Studio 2015中,我该如何实现?
我被告知留在Visual Studio 2015中.理想情况下,我想为每个单独的脚本发出一个命令与一个命令.
我在同一个解决方案中有几个数据库项目.他们都没有发表.我的Visual Studio版本是Enterprise 2015.我的SQL Server版本是12.0.4459.0.
用于在我的机器上正确发布的项目.他们在我的同事机器上正确发布.我没有在我的同事机器上更改正确发布版本的数据库项目.
我用来发布的步骤如下:
我期望发生的事情:显示Data Tools Operations窗口并成功发布项目.
实际发生的情况:不显示"数据工具操作"窗口.切换到"数据工具操作"窗口时,它为空.该项目尚未公布.Visual Studio随后在关闭时正常运行.关闭Visual Studio时,将显示一个对话框,说明"发布时无法关闭解决方案".
Visual Studio数据库版本附带了一个工具vsdbcmd.exe,该工具应该允许某人将.dbschema文件(由构建时的数据库项目生成)部署到数据库.它通过首先构建脚本然后执行它来完成此操作:
vsdbcmd.exe/a:Deploy/cs:"Data Source =(local); Integrated Security = True; Pooling = False"/ dsp:Sql/dd /model:"..Database.dbschema"/ p:TargetDatabase = TargetDB /manifest:"..\Database.deploymanifest"
我希望它可以将脚本部署到不同的数据库服务器而不会出现问题.但是,实际.mdf文件的完整路径在脚本中编码,以及对原始数据库的一些其他引用.要么没有控制它的选项,要么我找不到它.
有人用这个吗?你如何部署?我应该使用不同类型的数据库项目(我记得在"数据库项目"和"服务器项目"之间有选择的方式,但我不知道这是否重要)?
编辑
我可以覆盖.sqlcmdvars就好了,但这并没有解决问题.这是使用上面的命令从生成的.sql文件中提取的:
GO
:setvar DatabaseName "TargetDB"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\"
Run Code Online (Sandbox Code Playgroud)
因此,正确记录了"targetdb"目标数据库.但是,进一步说:
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [Original], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
LOG ON (NAME = [Original_log], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %) …Run Code Online (Sandbox Code Playgroud) 是否可以使用TeamCity部署VS 2010数据库项目?
我正在构建我的整个解决方案,并将网站部署到我的服务器,这一切都正常.
我想要触发的最后一步是部署数据库项目,该项目生成一个sql脚本并进行部署.
我选择了"创建部署脚本(.sql)并部署到数据库"选项作为部署操作,我的配置目标设置为构建和部署数据库项目,但我无法想象如何获取TeamCity和MSBuild触发它.
msbuild teamcity database-project visual-studio-2010 visual-studio
database-project ×10
sql-server ×2
azure ×1
gdr ×1
login ×1
msbuild ×1
publish ×1
syntax-error ×1
t-sql ×1
teamcity ×1