System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的异常附加信息:无效的对象名称

时间:2015-04-22 07:05:50

标签: c# sql-server stored-procedures

我正在尝试将一个数组作为tvp添加到sql server中。实际存在的问题是我在存储过程中调用了一个函数但是出现错误 "无效的对象名称' IncrementKeyID'"。 我的c#代码是这样的:

   public void key_insert(string[] KeyArray, int count)
    {
        var keyworddt = new DataTable();
        keyworddt.Columns.Add("strKeyword_Name", typeof(string));
        for (int i = 0; i < count;i++ )
            keyworddt.Rows.Add(KeyArray[i]);
        var parameter = new SqlParameter("@Keyword", SqlDbType.Structured);
        parameter.Value = keyworddt;
        parameter.TypeName = "dbo.KeyInsertUDT";
        using (obj)
        {
            obj.Database.ExecuteSqlCommand("exec dbo.usp_KeyInsert @Keyword", parameter);
        }
    }

我将表格创建为

    CREATE TABLE dbo.Tbl_Keyword
    (
     PK_strKeyword_Id varchar(11) not null,
     strKeyword_Name varchar(30) not null,
     PRIMARY KEY (PK_strKeyword_Id)
    ); 

TVP的创建类似于

  Create Type KeyInsertUDT as Table 
  (
  strKeyword_Name varchar(30)
  )

我创建的函数以及调用该函数的存储过程是:

    CREATE FUNCTION dbo.IncrementKeyID
    ()
    RETURNS VARCHAR(11)
    as 
    begin
    DECLARE @PK_strKeyword_Id VARCHAR(11);
    DECLARE @PreFix VARCHAR(10) = 'KEY';
    DECLARE @Id INT;

    SELECT @Id = ISNULL(COUNT(PK_strKeyword_Id),0) + 1 FROM Tbl_Keyword
    SELECT @PK_strKeyword_Id = @PreFix + RIGHT('' + CAST(@Id AS VARCHAR(7)), 7)
    RETURN @PK_strKeyword_Id
    END


    Create procedure usp_KeyInsert
    @Keyword dbo.KeyInsertUDT Readonly
    as
    Begin
    insert into dbo.Tbl_Keyword (PK_strKeyword_Id,strKeyword_Name)
     SELECT f1.PK_strKeyword_Id,f2.strKeyword_Name
    FROM
    (SELECT * FROM IncrementKeyID()) AS f1
    CROSS JOIN
    (SELECT strKeyword_Name FROM @Keyword) AS f2
    End

我知道问题在于存储过程,但由于我对这个概念不熟悉,我无法理解错误所在。在我的存储过程中,我基本上尝试检索数组值并将它们存储在关键字表中,为其分配唯一的主键。如何调试错误?

0 个答案:

没有答案