我在Visual Studio 2013中有一个非常简单的SQL项目,但无法发布到另一个数据库。
在obj文件夹中,它生成“MYPROJECT.generated.sql”文件,但Microsoft.SqlServer.Server属性在CREATE ASSEMBLY上方输出。
CREATE PROCEDURE ....
AS EXTERNAL NAME [MyProject].[StoredProcedures].[MyMethod]
GO
CREATE TRIGGER ....
FOR INSERT
AS EXTERNAL NAME [MyProject].[Triggers].[MyTrigger]
GO
CREATE ASSEMBLY [MyProject] AUTHORIZATION [dbo]
FROM 0x234234...... (DLL as Binary Hex)
WITH PERMISSION_SET = SAFE
我的问题是,这会产生错误,因为在SQL目录中找不到[MyProject]。如果我手动将CREATE ASSEMBLY移动到顶部,那么它可以根据需要工作。
我假设T4模板正在生成此文件,并且想知道是否有人知道如何更新/交换模板以便我可以随机调整顺序(并且可能将模式添加到SqlProcedureAttribute)
[UPDATE]
我的目标数据库需要30分钟才能发布,我需要更快地转向开发/调试SQLCLR项目。我的SQLCLR是一个单独的项目,它被设置为我的大型目标数据库(构建顺序)的依赖项。在过渡期间,我创建了一个在SQLCLR post build事件中调用的vbScript,用于复制SQLCLR / prebuild.sql,并将generated.sql + top of generated.sql + SQLCLR / postbuild.sql的底部合并到一个合并的Target中/PostBuild.sql。这两个脚本是从目标数据库的pre和post构建脚本中触发的。这可以确保我的程序集十六进制是最新的并且目标是正确的配置(DEBUG | RELEASE),我可以在目标项目之外手动部署它。 (3秒对30分钟重新部署我的程序集)
[UPDATE2]
我将其从生成脚本以附加到主项目,修改为包含链接文件的独立项目。这样大型数据库项目部署保持不变并使用dacpac进行部署,我有一个单独的项目可用于快速构建和部署测试