【发布时间】:2016-10-26 08:56:01
【问题描述】:
我是 CLR 的新手,并且已经在努力学习 Microsoft 教程。
这是教程:How to: Create and Run a CLR SQL Server Stored Procedure
有一个示例存储过程 Insert_Currency_CS 和一个 test.sql
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[SqlProcedure()]
public static void InsertCurrency_CS(
SqlString currencyCode, SqlString name)
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
SqlCommand InsertCurrencyCommand = new SqlCommand();
SqlParameter currencyCodeParam = new SqlParameter("@CurrencyCode", SqlDbType.NVarChar);
SqlParameter nameParam = new SqlParameter("@Name", SqlDbType.NVarChar);
currencyCodeParam.Value = currencyCode;
nameParam.Value = name;
InsertCurrencyCommand.Parameters.Add(currencyCodeParam);
InsertCurrencyCommand.Parameters.Add(nameParam);
InsertCurrencyCommand.CommandText =
"INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" +
" VALUES(@CurrencyCode, @Name, GetDate())";
InsertCurrencyCommand.Connection = conn;
conn.Open();
InsertCurrencyCommand.ExecuteNonQuery();
conn.Close();
}
}
}
和
EXEC InsertCurrency 'AAA', 'Currency Test'
SELECT * from Sales.Currency where CurrencyCode = 'AAA'
为了让它工作,我猜我必须添加 AdventureWorks2014,所以我只是将它作为新的数据库项目添加到我的解决方案中,可以将其内容(表格和 2 个脚本)复制粘贴到解决方案资源管理器内的我的第一个项目数据库中。但随后我在部署脚本 CLRTest.sql 中收到语法错误和未识别的选项错误,例如以下几行:
GO
:setvar DatabaseName "CLRTest"
:setvar DefaultFilePrefix "CLRTest"
:setvar DefaultDataPath "C:\Users\Torsten\AppData\Local\Microsoft\VisualStudio\SSDT\CLRTest"
:setvar DefaultLogPath "C:\Users\Torsten\AppData\Local\Microsoft\VisualStudio\SSDT\CLRTest"
第一行 :setvar 出现语法错误,DataBaseName 不是可识别的选项。这里也一样
:on error exit
这里
:setvar __IsSqlCmdEnabled "True"
现在也许有人可以解释我如何让我的数据库项目使用 AdventureWorks2014 数据库,以便教程 CLR 存储过程在被 test.sql 执行时工作。
我想问题是我不知道如何将 AdventureWorks2014 数据库放入我的空数据库项目中。我现在正在尝试 SQLSchemaCompare,然后更新 Target (localdb)\ProjectsV12.CLR 测试。这里我有一个问题,如果我在升级中包含 AW2014FullTextCatalog,我会收到一个脚本执行错误,如果我排除它,我会在另一个脚本 CREATE FULLTEXT INDEX ON... 另外这个错误:
错误 1 SQL72014:.Net SqlClient 数据提供者:
消息 9982,级别 16,状态 100,第 1 行无法在用户实例中使用全文搜索。
C:\Users\Torsten\AppData\Local\Temp\CLR Test_1_Update3.publish.sql 47 1
我什至不确定这是将数据库放入空数据库的正确方法,MS教程甚至没有达到VS2013,而只有VS2010......
【问题讨论】:
-
你得到哪个错误?
-
CREATE FULLTEXT CATALOG和什么有什么关系?你复制粘贴错了吗?或者您是否可能在某处忘记了GO,导致此语句被视为前一个语句的一部分? -
错误:SQL72045:脚本执行错误。执行的脚本: CREATE FULLTEXT CATALOG [AW2014FullTextCatalog] WITH ACCENT_SENSITIVITY = ON AS DEFAULT AUTHORIZATION [dbo];
-
这不是SQL Server返回的错误,是SSDT部署过程返回的错误。真正的错误应该隐藏在输出窗口的某个地方,您可能必须增加详细程度。或者,如果您想走捷径,在数据库项目中找到全文目录并将其删除——它是 Adventure Works 的一部分,但与测试 CLR 存储过程的工作方式无关。
-
@user26026 如果问题很清楚,那么其他人就不会要求澄清。此外,当声明发生错误但特定(和完整)SQL Server 错误消息尚未包含在问题中时,很难将问题视为“明确”。
标签: c# .net sql-server stored-procedures sqlclr