我想補充一個數組作爲TVP到SQL Server。問題確實存在,我在存儲過程中調用了一個函數,但錯誤出現爲 「無效的對象名'IncrementKeyID'」。 我的C#代碼是這樣的:的類型「System.Data.SqlClient.SqlException」的異常出現在System.Data.dll中其他信息:無效的對象名稱
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
我知道問題在於存儲過程,但由於我對這個概念很陌生,我無法理解錯誤在哪裏。在我的存儲過程中,我基本上試圖檢索數組值,並將它們存儲在關鍵字表中爲其分配唯一主鍵。我如何調試錯誤?
呼叫你的程序爲'dbo.IncrementKeyID()' – ughai