标签: sql-server-data-tools

RedGate SQL 工具 v Microsoft Visual Studio Team System 数据库版 (Data Dude)

我一直在研究在测试和持续集成环境中使用 RedGate 的 SQL 工具和 Microsoft Visual Studio Team System Database Edition(以前称为 Data Dude)。

我们需要做的是:

  • 源代码控制下的架构和数据
  • 使用 TeamCity(命令行)自动持续集成
  • 将更改(和数据)推送到环境(暂存、生产、测试​​),但不从 Visual Studio 推送

什么解决方案最适合我们的需求以及人们对这两种产品的意见、看法和体验是什么。您选择/会选择哪个?为什么?有没有我错过的替代方案?

sql-server continuous-integration redgate datadude sql-server-data-tools

5
推荐指数
1
解决办法
3625
查看次数

DACPAC 不包括复合对象

我有一个 VS2012 数据库项目,其中包括表、存储过程、视图等。

然后我有第二个数据库项目,其中包含对第一个项目的数据库引用。我已确保从“项目属性 -> 调试 -> 高级”菜单中选择“包括复合对象”选项。

当我构建第二个项目并获取生成的 DACPAC 文件并通过 SSMS2012 部署它时,它不会创建第一个项目的对象。

我错过了什么吗?为什么复合对象不包含在 DACPAC 中?

database-deployment visual-studio-2012 ssms-2012 dacpac sql-server-data-tools

5
推荐指数
1
解决办法
3941
查看次数

Azure SQL DACPAC 部署失败 - 不支持目标架构的兼容性级别。

我似乎在将架构部署到 Azure SQL 数据库(上周创建,兼容性 140)时遇到问题。

我们有一个 SSDT DACPAC 架构要部署到,它与 IaaS SQL Server 2016 实例完美配合,但是当将目标版本更改为 Azure SQL V12 并尝试通过 VSTS 部署到我们的 PaaS 数据库时,我收到此错误:

[错误] 错误 SQL72020:不支持目标架构的兼容级别。

我们已尝试将 Compatbility MSBuild 值设置为 120,130,140 并将其留空 - 似乎没有任何区别。以下是 .sqlproj 文件的摘录:

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <Name>DataSchema</Name>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectVersion>4.1</ProjectVersion>
    <ProjectGuid>{5d100d18-648c-4aac-9884-8a7b3c97f033}</ProjectGuid>
<DSP>Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider</DSP>
    <OutputType>Database</OutputType>
    <RootPath>
    </RootPath>
    <RootNamespace>CustomerData</RootNamespace>
    <AssemblyName>CustomerData</AssemblyName>
    <ModelCollation>1033,CI</ModelCollation>
    <DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
    <DeployToDatabase>True</DeployToDatabase>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <TargetLanguage>CS</TargetLanguage>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <SqlServerVerification>False</SqlServerVerification>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseSet>True</TargetDatabaseSet>
    <DefaultCollation>SQL_Latin1_General_CP1_CI_AS</DefaultCollation>
    <DefaultFilegroup></DefaultFilegroup>
    <TargetDatabase>Data</TargetDatabase>
    <CompatibilityMode></CompatibilityMode>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

从 MSDN 教程看来,它应该像创建 SSDT DACPAC 项目一样简单,选择 SQL Azure …

azure sql-server-data-tools azure-sql-database

5
推荐指数
1
解决办法
3968
查看次数

SqlPackage.exe 提取数据和架构验证

安装 Sql Server Data Tools 后,我尝试SqlPackage.exe从以下位置使用:C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\

我想“提取”模式和数据。这样我就可以迁移到没有任何现有数据库的新服务器 - 我希望架构和数据包含在该迁移中。这只是一个旋转/一次性环境。

现有的数据库并不是很好,因为它们具有跨数据库引用。我要导出的数据库有多个对另一个名为“audit”的数据库的引用。涉及触发器 - 希望你能理解。

阅读文档后,我尝试了以下命令:

.\sqlpackage.exe /Action:Export /SourceDatabaseName:"MyDb" /SourceServerName:foo\bar /TargetFile:"C:\temp\mydb.bacpac"
Run Code Online (Sandbox Code Playgroud)

但是,这导致了以下许多错误:

Error SQL71562: Error validating element [dbo].[foo_u]: Trigge
r: [dbo].[foo_u] has an unresolved reference to object [Audit].[dbo].[Foo].[FooId]. External references are not supported when creating a package from this platform.
Run Code Online (Sandbox Code Playgroud)

我尝试指定,/p:VerifyExtraction=false但这导致:

.\sqlpackage : *** 'VerifyExtraction' is not a valid argument for the 'Export' action.
Run Code Online (Sandbox Code Playgroud)

所以现在我在想哇,这一定不能得到支持。但是在 VS2017 中,当我转到 SQL 服务器资源管理器时,我可以“提取数据层应用程序”并为所有表选择“提取架构和数据”选项。这运行良好并生成一个“foo.dacpac”文件 - 用户界面提供了一个“验证提取”选项,我没有选中它。

现在我倍感困惑,因为我认为 dacpac 文件只包含架构,而bacpac …

sql-server sql-server-data-tools

5
推荐指数
1
解决办法
2062
查看次数

VS2017 Team Explorer SSDT 安装失败

我正在尝试将 SSDT v15.6.0 安装到现有的 Visual Studio Team Explorer 2017 实例中。当我运行 SSDT 安装程序时,我可以从此现有 Visual Studio 实例列表中选择 Visual Studio Team Explorer 2017。如果我没有选择任何选项(所需的 SQL Server 数据库选项除外)。安装成功完成。

但是,如果我尝试选择任何/所有其他选项,安装将失败。从查看日志文件来看,VSIX 的安装似乎由于缺少所需的组件而失败。

下面是 SSDT-Setup 安装日志文件的片段,表明 VSIX 安装失败。

[167C:1A6C][2018-05-16T15:40:41]i301: Applying execute package: Microsoft.DataTools.IntegrationServices, action: Install, path: C:\ProgramData\Package Cache\9864EE5369359DB622D0234B6C6B7640B949140C\VSIXBootstrapper.exe, arguments: '"C:\ProgramData\Package Cache\9864EE5369359DB622D0234B6C6B7640B949140C\VSIXBootstrapper.exe" /q /admin /instanceIds:"68f392fc" /logFile:"C:\Users\golaat\AppData\Local\Temp\SsdtSetup\SSDT-Setup-ENU_20180516153141_009_Microsoft.DataTools.IntegrationServices.log" "payload\Microsoft.DataTools.IntegrationServices.vsix"'
[167C:1A6C][2018-05-16T15:41:13]e000: Error 0x80131500: Process returned error: 0x80131500
[167C:1A6C][2018-05-16T15:41:13]e000: Error 0x80131500: Failed to execute EXE package.
[1D80:1858][2018-05-16T15:41:13]e000: Error 0x80131500: Failed to configure per-machine EXE package.
Run Code Online (Sandbox Code Playgroud)

查看安装 VSIX 的日志文件,似乎缺少必需的组件:

 5/16/2018 3:41:05 PM - BEGIN: …
Run Code Online (Sandbox Code Playgroud)

team-explorer sql-server-data-tools visual-studio-2017

5
推荐指数
2
解决办法
3140
查看次数

SQL Server 数据库项目属性中的本地和默认 SQLCMD 变量有什么区别?

我有一个 SQL Server 数据库项目 (VS2017),在项目属性中,SQLCMD 变量选项卡如下所示:

在此处输入图片说明

问题:我可以创建一个 SQLCMD 变量并为其设置一个默认值一个本地值。有什么不同?

注意:我目前确实在我的项目中使用 SQLCMD 变量,所以我想我知道它们是如何工作的,但我无法理解这种区别。根据我可以找到的文档(突出显示是我的):

在 SQL Server 数据库项目中,您可以利用 SQLCMD 变量提供用于调试或发布的动态替换。您输入变量名称和值,在构建期间,这些值将被替换。如果没有本地值,将使用默认值。通过在项目属性中输入这些变量,它们将自动在发布中提供并存储在发布配置文件中。您可以通过加载值按钮将变量的项目值拉入发布。

所以看起来:

  • 如果您只有一个默认值,则将使用该值
  • 如果您只有一个 Local 值,则将使用该值
  • 如果两者都有,则将始终使用Local 值。

这对我有什么帮助?设置两个值似乎没有意义,那么为什么我们需要两个不同的值呢?

database-project visual-studio sql-server-data-tools

5
推荐指数
1
解决办法
777
查看次数

如何避免在重新运行加载数据的 SSIS 包时将数据(重复项)重新插入 SQL Server 表?

我创建的包是SSIS。第一次插入它工作正常。当我通过 SQL Server 代理作业运行包时,我在计划作业插入数据时插入了重复项。

我不知道如何停止插入多个重复记录。

我希望在通过 SQL Server 作业运行部署的包时删除重复项插入

在此处输入图片说明

sql-server ssis etl duplicates sql-server-data-tools

5
推荐指数
1
解决办法
4142
查看次数

由于不存在的文件中的语法错误,数据库项目构建失败

我正在尝试构建一个数据库项目,我试图在我的 Visual Studio 2017 解决方案中创建一个系统版本表,但我突然收到一个错误:

SQL46010:] 附近的语法不正确

通常,这将是一个简单的修复......除了它所指的文件不存在!当我双击错误列表中的错误时,我得到:

找不到文件“MSSQL::dbo.TestHISTORY”

它所指的表是我命名为我创建的另一个表的 SYSTEM_VERSIONING = ON(减去 MSSQL:: 前缀)命令的一部分的表。我重新启动了 Visual Studio,恢复了我对数据库项目所做的所有更改,重新启动了我的电脑,对项目执行了清理操作,但都无济于事!

有没有其他人遇到过这个错误?

sql-server visual-studio sql-server-data-tools

5
推荐指数
1
解决办法
685
查看次数

SSIS/SSDT 警告未出现在错误列表中

本质上,我遇到了与下面的问题相同的问题,只是接受的答案没有解决它。我在错误列表中既没有警告也没有错误:

查看 Visual Studio 中数据流 SSIS 元素的完整工具提示错误消息

与上面提到的问题类似,我可以在数据流设计图面上看到一条被截断的警告消息。

在此处输入图片说明

但是,在 Visual Studio 的错误列表视图中看不到相应的警告。

在此处输入图片说明

如何查看整个警告?

ssis visual-studio sql-server-data-tools visual-studio-2017

5
推荐指数
1
解决办法
1158
查看次数

SSDT 不考虑触发器启用/禁用属性

我已经从现有数据库创建了一个 SSDT 项目。它在 tablename.sql 文件中包含现有触发器。

CREATE TABLE [dbo].[TableName] (
    [ID]        INT           NULL
)

GO

CREATE TRIGGER trgTableName ON dbo.TableName
FOR INSERT 
AS
BEGIN
 ....
END

GO

DISABLE TRIGGER [dbo].[trgTableName] ON [dbo].[TableName]; /* My trigger is currently disabled */
GO
Run Code Online (Sandbox Code Playgroud)

但是,每当我修改触发器时,SSDT 都会再次启用它。它在部署时不考虑触发器禁用属性。

无论如何我可以让SSDT禁用触发器(如果它已经在数据库中被禁用)?

我正在考虑的方法之一是添加为部署后脚本。但是,最好为此使用现有的 SSDT 功能,而不是手动添加部署后脚本。

编辑:如果我们更新它们,SQL 服务器似乎会自动启用触发器。就我而言,触发器有更新,因此它启用了触发器。但是,SSDT 不会在更新后禁用它。

sql-server sql-server-data-tools

5
推荐指数
1
解决办法
196
查看次数