【问题标题】:SQL71508:The model already has an element that has the same nameSQL71508:模型已经有一个同名的元素
【发布时间】:2018-05-24 12:44:52
【问题描述】:

我的项目中有一个 CLR 函数: 我用 .NET Framework 支持的语言将该函数定义为类的静态方法。然后,编译该类以构建一个程序集。

[SqlFunction]
public static SqlString InsertCampaignRecipients(SqlString url)
{
    var rowData = string.Empty;
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        var response = client.GetAsync(new Uri(url.Value)).Result;
        if (response.IsSuccessStatusCode)
        {
            var result = response.Content.ReadAsStringAsync().Result;
            if (result.IndexOf(@"""Exception"":null}") > 0) //success
            {
                rowData = "success";
            }
            else
            {
                rowData = string.Empty;
            }
        }
        else
        {
            rowData = string.Empty;
        }
    }
    return rowData;
}

然后我使用 CREATE FUNCTION 语句创建了引用已注册程序集的函数:

CREATE FUNCTION [dbo].[InsertCampaignRecipients] (@url NVARCHAR (4000) NULL)
RETURNS NVARCHAR (4000)
AS
  EXTERNAL NAME [SmartTouch.CRM.SqlClrDb].[UserDefinedFunctions].[InsertCampaignRecipients]

我有一个错误:

SQL71508:模型已经有一个同名的元素 dbo.InsertCampaignRecipients

但是如果我重命名我的 SQL 函数,错误就消失了。有什么问题?

【问题讨论】:

  • 嗯,已经有另一个对象叫做InsertCampaignRecipients?至少这是错误所暗示的,重命名也有助于支持这一点。
  • 也许 ALTER FUNCTION .... 假设 InsertCampaignRecipients 是预先存在的功能
  • 有时这是由于 VS 中的故障而发生的。您应该可以通过清除 bin 并重新启动 VS 来修复它。

标签: c# sql sql-server tsql


【解决方案1】:

同名对象已存在。你可以找到它是这样的:

SELECT * FROM sys.objects o WHERE o.name ='InsertCampaignRecipients' 

【讨论】:

  • 是的,我的数据库中有一个带有 type_desc CLR_SCALAR_FUNCTION 的对象“InsertCampaignRecipients”。不是我的SQL函数吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
相关资源
最近更新 更多