Joh*_*ohn 7 sql-server stored-procedures sqlclr visual-studio-2013
我一直在使用早期版本的Visual Studio(VS2008)和SQL Server 2008.
最近我的组织搬到了VS2013和SQL Server 2012.我发现VS2013中的数据库接口与VS2008中的数据库接口有很大的不同.
我的问题基本上是,如果有人知道一篇文章或引用,详细说明如何做这里描述的内容:
http://yassershaikh.com/how-to-create-a-clr-stored-procedure-using-c-and-visual-studio/
(特别是将DLL部署到SQL Server 2012数据库).
但是使用VS2013和SQL Server 2012.
Sol*_*zky 15
(如果此处的信息与您看到的信息之间存在细微差别,我将在Windows 8上运行带有SSDT 11.1.31203.1的Visual Studio 2012 Update 4)
在VS 2008/VS 2010中,您可以"部署"一个数据库项目(即分别为.csproj
/ .dbproj
file),以将程序集和T-SQL包装器对象导入SQL Server.较新版本的Visual Studio仍然在"Build"菜单中有"Deploy"选项(至少VS 2012将它们用于解决方案和项目),但它们没有做任何事情.您现在有了一个.sqlproj
文件,将解决方案/项目导入数据库的方法是使用"Build"菜单中的"Publish {SolutionName} ..."选项.
更多关于发布的消息.首先,这里有一些可能有用的信息:
.sqlproj
)通过SQL Server数据工具(SSDT)显式处理C:\Users\{User Name}\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\{Instance Name}
(localdb)\{Instance Name}
C:\Users\{User Name}\AppData\Local\Microsoft\VisualStudio\SSDT\{Solution Name}
...\SSDT\{Solution Name}
文件夹中,每个项目至少有两个文件:
{Project Name}.mdf
{Project Name}.ldf
...\SSDT\{Solution Name}
文件夹中{Build Output Path}\{Build Output File Name}_Create.sql
CREATE {Object Type} {Object Name} ... AS EXTERNAL NAME {Assembly Name}.{Class Name}.{Method Name OR "name" property, if specified, in the [SqlProcedure] / [SqlFunction] / [SqlUserDefinedAggregate] / [SqlUserDefinedType] / [SqlTrigger] attribute}
{Assembly Name}.pdb
文件导入SQL Server(in sys.assembly_files
); 即使取消选中此选项,.pdb
也会在该文件中创建该文件{Build Output Path}
..pdb
文件和源代码(.cs
和/或.vb.
)文件作为ALTER ASSEMBLY {Assembly Name} ADD FILE FROM 0x... AS {File Name}
条目.此选项似乎已被SQL CLR选项卡上的"包含符号"复选框所取代,该选项卡仅包含.pdb
文件而不包含源代码文件.[我认为这是一种改进,因为我从不喜欢部署源代码的想法,因为有些人(可能很多?)将所有这些东西提升为生产:-(.]选择"Build"菜单中的"Publish {Solution Name} ..."选项将弹出一个"Publish Database"对话框,询问数据库详细信息.对于"目标数据库连接:",单击右侧的"编辑..."按钮.将打开"连接属性"对话框."服务器名称:"会有一个下拉列表,您可以下拉以发现实例或只输入名称.如果你有一个在本地运行的默认实例,你应该只能输入"(local)"[但没有双引号].下一节"登录到服务器"中的默认身份验证是"使用Windows身份验证".如果您使用的是SQL Server登录,则可以选择其他单选按钮并输入"用户名:"和"密码:"详细信息.下一部分是"连接到数据库",并且已选择"选择或输入数据库名称:"的顶部单选按钮.有一个下拉列表,如果下拉,将填充在"服务器名称:"下拉列表中选择(或输入)的服务器上的数据库列表.选择或输入所需的数据库,然后单击对话框左下角的"测试连接"按钮.您应该弹出一个"测试连接成功"的弹出窗口,然后单击该弹出窗口中的"确定"按钮,然后单击"连接属性"对话框中的"确定"按钮.
现在你可以:
{Build Output Path}\{Build Output File Name}.publish.sql
仅供参考:创建对象的基本T-SQL片段可以在以下位置找到,但是您应该注意不要按原样运行SQL脚本,因为这些项目不是可运行的顺序:
{ProjectDir}\obj\{Configuration Name}\{Assembly Name}.generated.sql
对于上面几个特定于Visual Studio的引用,这些是您在UI中看到的字段的名称.它们在.sqlproj
文件中的等价物是:
<Name>
<AssemblyName>
<OutputPath>
<SqlTargetName>
<GenerateCreateScript>
<GenerateSqlClrDdl>
<GenerateSqlClrSymbols>
有关SQLCLR的更多信息,我正在编写一个关于SQL Server Central(需要免费注册)的系列文章,称为" Stoway to SQLCLR ".(目前只发表了4篇文章,最终将是12篇.下一篇,巧合的是,发展与Visual Studio :-))
编辑:
一个有趣的,也是最好的新功能是验证依赖关系以给出T-SQL对象的编译时错误,就像.Net语言一样.缺点是似乎没有办法禁用它.除了基于CLR的触发器之外,这通常不会影响SQL CLR项目.这里的问题是,如果你启用了"生成DDL"选项,以做"构建"你需要有Target
和Event
该属性SqlTrigger
填写属性.并且,模型(即数据库模型)验证步骤将检查以使Target
属性中指定的表实际存在.如果没有,您将收到unresolved reference to object
错误.看来,传递此方法的唯一方法是a)在项目中拥有该对象,或者b)在引用为"数据库引用"的项目中拥有该对象:
CREATE TABLE
在SSMS中生成语句,然后右键单击解决方案资源管理器中的项目(或转到"项目"菜单)并转到"导入" - >脚本(*.sql)......"..dacpac
文件:
.dacpac
文件记住:
CREATE TABLE
都会在_Create
脚本中生成完整的DDL ,但"发布"脚本将仅包含用于更改的DDL,因此如果表的定义没有更改,则表DDL将不会出现在"发布"中" .sql
脚本.通过将项目或.dacpac
文件中的表定义与"发布"对话框/向导的"连接设置"中定义的目标数据库进行比较来确定更改. 归档时间: |
|
查看次数: |
10100 次 |
最近记录: |