我知道在数据库中创建过程时我可以为CLR过程定义默认值,如下所示:
CREATE PROCEDURE [dbo].[ShredXml] (
@InputXml [xml],
@AttributeElementHandling [tinyint] = 0,
@ConversionHandling [tinyint] = 0,
@RootElementName [nvarchar](255) = null
)
AS EXTERNAL NAME [ClrXmlShredder].[ClrXmlShredder].[ShredXml]
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚是否有任何方法可以说服Visual Studio在使用其"部署项目"选项时自动执行此操作...
是否有一个属性可以设置在一个参数上,告诉visual studio当你在数据库中创建proc时,你想要该参数的默认值是什么?
更新:我已经尝试设置可空性"SqlFacet",这似乎没有效果(这有道理我猜 - afaik存储的proc参数总是可以为空?)
[Microsoft.SqlServer.Server.SqlProcedure]
public static void ShredXml(SqlXml InputXml,
[SqlFacet(IsNullable = true)]SqlByte AttributeElementHandling,
[SqlFacet(IsNullable = true)]SqlByte ConversionHandling,
[SqlFacet(MaxSize = 255, IsNullable = true)]string RootElementName
)
{
}
Run Code Online (Sandbox Code Playgroud) sql-server deployment sqlclr visual-studio-2008 sql-server-data-tools
我有一个针对SQL Server 2012 RC0数据库的SQL Server数据库项目.该项目是在Visual Studio 2010 + SQL Server数据工具CTP4中创建的.项目类型与常规Visual Studio 2010数据库项目不同(它是SQL Developer Tools CTP3 Juneau的下一个版本).
它在IDE中部署得很好.如何通过命令行部署它?
我尝试过VSDBCMD.exe,但它需要一个不是由新项目类型创建的.deploymanifest文件.
我正在使用VS 13刚刚安装了SQL Server 2014 Express,创建了一个新的数据库,当我去添加一个新表(在VS内)时,我收到以下错误:
发现不兼容的sql server版本
我该如何解决?我是否应该找到VS所需的版本(如果是,如何?)并降级到所需的版本,或者我可以使用SQL Server 2014 Express解决它吗?
我正在使用Visual Studio 2013创建一个新的SQL CLR,并且在Project Properties中将Default Schema设置为'decASM'(是'dbo').当我进行此更改并重建项目VS时,生成一个sql文件,如下所示:
--------------------------------------------------------------------------------
-- This code was generated by a tool.
--
-- Changes to this file may cause incorrect behavior and will be lost if
-- the code is regenerated.
--------------------------------------------------------------------------------
CREATE FUNCTION [decASM].[ExecFoxPro_SayHello] (@name [nvarchar](MAX))
RETURNS [nvarchar](MAX)
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[ExecFoxPro_SayHello];
GO
CREATE FUNCTION [decASM].[GetAllowedPaths] (@serviceUrl [nvarchar](MAX))
RETURNS [nvarchar](MAX)
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[GetAllowedPaths];
GO
CREATE FUNCTION [decASM].[GetTableRowCount] (@serviceUrl [nvarchar](MAX), @foxProPath [nvarchar](MAX), @tableName [nvarchar](MAX))
RETURNS [nvarchar](MAX)
AS EXTERNAL NAME [dcFoxProAssy].[UserDefinedFunctions].[GetTableRowCount];
GO
Run Code Online (Sandbox Code Playgroud)
每个CREATE FUNCTION调用都有一个错误:
Error 1 …Run Code Online (Sandbox Code Playgroud) sql-server schema sqlclr visual-studio-2013 sql-server-data-tools
我从Azure门户创建了.bacpac文件并将其保存到桌面.然后在Management Studio 2016候选人中右键单击数据库并选择导入数据层应用程序我将目标定位到我的文件然后下一个...当它进入流程时我收到错误:
无法加载文件或程序集"Microsoft.SqlServer.Dac,Version = 13.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"或其依赖项之一.您找不到指定的文件.(Microsoft.SqlServer.Management.Dac.DacWizard)
我正在搜索谷歌,但我找不到任何有效的解决方案.你能帮忙吗?
还查看此图片的配置:
我正在尝试安装SQL Server数据工具 - Visual Studio 2015,但我一直收到"未指定的错误".
该日志文件位于https://drive.google.com/open?id=0B3CEKzS2Sw8OODNJOXZJVGRWQlU.
我已经安装了Visual Studio Professional 2015.
我想安装SSDT 2015,因为我的数据库最近从SQL Server 2008 R2迁移到2014,我需要使用SSIS.以前,我使用SQL Server商业智能开发工作室来创建我的DTS包,我仍然安装它来访问旧包.
我试图找到解决我问题的方法,但一切似乎都与VS 2013安装问题有关.
如果我需要提供更多信息,请告诉我.
这是链接日志文件中的相关部分.
[2308:24BC][2016-10-12T09:32:14]: Plan complete, result: 0x0
[2308:24BC][2016-10-12T09:32:14]: Apply begin
[287C:2C64][2016-10-12T09:32:14]: Creating a system restore point.
[287C:2C64][2016-10-12T09:32:21]: Created a system restore point.
[287C:2C64][2016-10-12T09:32:21]: Caching bundle from: 'C:\Users\JENMCC~1\AppData\Local\Temp\{2e9e05c8-ae49-4af6-9121-fa821d1b5334}\.be\SSDTSetup.exe' to: 'C:\ProgramData\Package Cache\{2e9e05c8-ae49-4af6-9121-fa821d1b5334}\SSDTSetup.exe'
[287C:2C64][2016-10-12T09:32:21]: Registering bundle dependency provider: {2e9e05c8-ae49-4af6-9121-fa821d1b5334}, version: 14.0.60923.0
[2308:28AC][2016-10-12T09:32:21]: Prompt for source of package: DotNet46, payload: DotNet46, path: U:\Downloads\Microsoft\SSDT\SSDT 2015\payload\neutral\NDP461-KB3102436-x86-x64-AllOS.exe
[2308:28AC][2016-10-12T09:32:21]: Acquiring package: DotNet46, payload: DotNet46, download from: https://go.microsoft.com/fwlink/?LinkId=715689 …Run Code Online (Sandbox Code Playgroud) ssis sql-server-2014 sql-server-data-tools visual-studio-2015
我们正在部署到MS SQL Server localdb集成测试。
我们构建了一个数据库项目,并将生成的dacpac文件复制以供 IntegrationTests 项目使用。到目前为止,我们有:
DatabaseProject.sqlproj
bin/debug/DatabaseProject.dacpac
IntegrationTests.csproj
bin/debug/DatabaseProject.dacpac
Run Code Online (Sandbox Code Playgroud)
我们在 IntegrationTests 项目中有一个程序集设置,其中创建了一个新的新数据库并将其dacpac部署到localdb. 在 TearDown 中,数据库被删除,因此我们有一个确定性的测试状态。
这是部署 的代码dacpac,它使用DacServices( Microsoft.SqlServer.Dac, System.Data.SqlLocalDb, System.Data.SqlClient):
public void CreateAndInitializeFromDacpac(
ISqlLocalDbInstance localDbInstance,
string databaseName,
string connectionString,
string dacpacPath)
{
using (var cx = localDbInstance.CreateConnection())
{
cx.Open();
using (var command = new SqlCommand(
string.Format("CREATE DATABASE {0}", databaseName), cx))
command.ExecuteNonQuery();
}
var svc = new DacServices(connectionString);
svc.Deploy(
DacPackage.Load(dacpacPath),
databaseName,
true
);
} …Run Code Online (Sandbox Code Playgroud) 这一切都始于TC中的VS2017转轮类型.它没有任何错误或提示失败(除了(default targets) -- FAILED.解决方案级别的消息).我把它缩小到了.sqlproj'ects.这些不是通过MSBuild构建的,它们在构建代理上的VS2017中完全编译.我正在责备SSDT ......但我猜我检查了一切.这是在TC构建中达到解决方案级别的问题:
我注意到对于VS2017,SSDT附带了VS设置.安装了"工作负载""数据存储和处理","单个组件"下的"SQL Server数据工具"也是如此.我注意到https://docs.microsoft.com/EN-US/sql/ssdt/download-sql-server-data-tools-ssdt句子"如果你在Visual Studio 2017中使用SSDT,请安装AS和RS组件".做到了.没有改变.SSDT也为以前的版本单独安装.
这个堆栈是相关的,但它没有帮助我.
还有其他想法吗?
我走得更远了.除了VS生成工具安装以及在构建剂和TeamCity的亚军为VS2017显然使用的MSBuild从Build工具.正如您在上面所看到的,我也在使用Build Tools中的MSBuild重现了这个问题.如果我选择VS2017的MSBuild"版本",它就像一个魅力(就像在VS中一样).简而言之:
什么都不行
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin
作品
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin
msbuild teamcity database-project sql-server-data-tools visual-studio-2017
使用 Visual Studio 数据库项目 (SSDT),我向现有表添加了一个新列。我正在使用 Always Encrypted 来加密各个列。当我添加列并尝试发布时,我在 Visual Studio 中看到一个弹出窗口,显示“值不能为空。参数名称:reportedElement”。
如果我不加密该列,它就可以工作。如果我从表中清除现有数据,它就可以工作。但是只是尝试添加一个新的可为空的加密列并不会发布。它甚至不会生成将应用的脚本。
我运行了 daxFX 和 SSDT 日志记录并使用 Windows 事件查看器查看了日志,但我只看到相同的错误“值不能为空。参数名称:reportedElement”。
这就是添加的列定义的样子。
[MyNewColumn] INT ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [DefaultColumnEncryptionKey], ENCRYPTION_TYPE = DETERMINISTIC, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
Run Code Online (Sandbox Code Playgroud)
我希望 Visual Studio 能够成功发布,添加我新的可为空的加密列,但实际行为是一个弹出窗口,指出“值不能为空。参数名称:reportedElement”。
sql-server sql-server-data-tools always-encrypted visual-studio-2017
我想在 linux 容器中构建一个 .sqlproj。问题是构建 .sqlproj 依赖于 SSDT,到目前为止我找不到可以在 linux 上作为独立安装的 SSDT。
错误我看到在我的容器中运行“dotnet msbuild”:
error MSB4019: The imported project "/usr/share/dotnet/sdk/2.2.402/Microsoft/VisualStudio/v11.0/SSDT/Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Run Code Online (Sandbox Code Playgroud)
在 .sqlproj 文件中搜索该问题,我看到我们正在尝试导入 Schema.SqlTasks.targets 文件,我假设 SSDT 创建了该文件:
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
Run Code Online (Sandbox Code Playgroud)
我在测试“dotnet build”时看到同样的错误
有一个 Windows 独立选项:
https://www.nuget.org/packages/Microsoft.Data.Tools.Msbuild/10.0.61804.210
有没有人找到在 linux 容器中提供 SSDT 的方法?
目标状态:生成 dacpac 的构建步骤将发生在容器内。
当前状态:现在我在我的机器上使用 Visual Studio 作为构建机器,然后将 dacpacs 复制到 sqlpackage.exe 然后可以发布架构的容器。
为什么是 Linux? …
sql-server ×7
c# ×2
sqlclr ×2
asp.net ×1
dacpac ×1
deployment ×1
docker ×1
linux ×1
localdb ×1
msbuild ×1
schema ×1
sqlpackage ×1
ssis ×1
ssms ×1
teamcity ×1