2013-04-12 80 views
4

我從大型Excel表導入數據並將其存儲在stateTable中。現在我必須將這些數據推送到數據庫表中。該表具有標識列(1,1)。在表格變量中不允許插入標識列

我在DB中創建了一個類似的表類型,並且創建了一個將參數作爲表類型插入到特定表中的過程。我還設置了身份插入。

我的代碼是:

using (SqlCommand command = new SqlCommand("InsertStateTable") { 
    CommandType = CommandType.StoredProcedure}) 
{ 
    SqlParameter param = command.Parameters.AddWithValue("@statetable", dt); 
    param.TypeName = "StateTable"; 
    param.SqlDbType = SqlDbType.Structured; 
    command.Connection = con; 
    con.Open(); 
    command.ExecuteNonQuery(); 
    con.Close(); 
} 

但是,出現錯誤是 「INSERT INTO不允許對錶變量的標識列。」 我走了很多網站,但沒有具體的理由給出.....

在此先感謝。

+0

你是如何「設置身份插入」?你的意思是全球嗎?因爲每個表的語法不適用於表變量/表值參數... –

回答

1

錯誤很明顯:你不能做你想做的事情。基本上,你將不得不找到一個不依賴於將標識值插入到表變量/表值參數中的設計。我的建議是要創造具有相同數據一個單獨的表變量(無關的表值參數),但它不具有IDENTITY列,所以......

declare @foo table (id int not null, name nvarchar(200) not null /* etc */) 
insert @foo (id, name /* etc */) 
select id, name /* etc */ from @statetable 

在哪個點@foo有原始數據,但沒有身份列 - 然後您可以用@foo做任何你想做的事情。

沒有看到你對你的身份插入做什麼,很難進一步評論。

+0

是否有任何其他方法來插入從Excel表單填充到Sql Server數據庫的數據表。 – Veer

+1

@ VeerB.Singh'SqlBulkCopy'? –

+0

謝謝馬克。它適用於Sqlbulkcopy。要插入身份密鑰,您必須使用SqlBulkCopyOptions.KeepIdentity – Veer