我可以忽略SQL數據庫已經存在從我傳遞到SqlBulkCopy的數據表中數據的重複記錄。如果是,那麼如何解釋我,如果否和其他選項。SqlBulkCopy的忽略的數據表中重複的記錄從數據庫
回答
不,這不是內置的。您需要清除客戶端上的數據或首先插入臨時表中。
正如以前的海報說,這是不是建立在我使用下面的實現類似:
SQL存儲過程,接受你所需要的數據TableValuedParameter。
在存儲過程中,我然後將所有記錄插入臨時表。一旦你有了它,你可以在存儲過程中使用SQL MERGE語句將數據插入到不存在的地方。
所以,讓我們假設我們的數據僅僅是存儲在表中的人的人的名字。我們只有一個ID和一個名字。我也假設這張桌子被稱爲'人'。
以下是我創造我的表值參數類型(在SQL Server中創建)
CREATE TYPE udt_person AS TABLE(
[id] [INT] NOT NULL,
[name] [nvarchar(50)] NULL
)
GO
我現在創建存儲過程:
CREATE PROCEDURE SaveNewPeople @pPeople udt_Person
AS
BEGIN
-- Create Temp table
CREATE TABLE #tmpPeople (id INT, name VARCHAR 50)
-- We will stage all data passed in into temp table
INSERT INTO #tmpPeople
SELECT id, name FROM @pPeople
-- NB: you will need to think about locking strategy a bit here
MERGE people AS p
USING #tmpPeople AS t
ON p.id = t.id
WHEN NOT MATCHED BY TARGET THEN
-- We want to insert new person
INSERT (id, name) VALUES (t.id, t.name)
WHEN MATCHED THEN
-- you may not need this, assume updating name for example
UPDATE SET p.name = t.name
END
現在,我們已經制定了SQL。
讓我們在C#中創建大量的數據:
DataTable ppl = new DataTable();
ppl.Columns.Add("id", typeof(int));
ppl.Columns.Add("name", typeof(string));
// table is created, let's add some people
var bob = ppl.NewRow();
bob["id"] = 1;
bob["name"] = "Bob";
ppl.Rows.Add(bob);
var jim = ppl.NewRow();
jim["id"] = 2;
jim["name"] = "Jim";
ppl.Rows.Add(jim);
// that's enough people for now, let's call the stored procedure
using(var conn = new SqlConnection("YouConnStringHere"))
{
using(var cmd = new SqlCommand("SaveNewPeople", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
var tvp = new SqlParameter
{
ParameterName = "@pPeople",
SqlDbType = SqlDbType.Structured,
Value = ppl,
TypeName = "udt_person"
}
cmd.Parameters.Add(tvp);
conn.Open();
cmd.ExecuteNonQuery();
}
}
希望這給你的想法。如果您然後修改了C#數據表,您應該看到插入,更新或忽略的行。
祝你好運。
是的,謝謝GinjaNinja。我有你說的。你能否給我一個表值函數和SQL合併語句的代碼示例。我正在使用Sql Server 2000和.net 2.0 – Rahul
我修改了我的上面的帖子,然後注意到你在SQL 2000上。這不起作用,對不起! – GinjaNinja
- 1. 在數據庫中重複記錄
- 2. mysql:只記錄某個數據庫或忽略其他數據庫的?
- 3. 如何忽略數據庫查詢中重複的順序值
- 4. 更新表記錄,而忽略重複
- 5. 從數據庫中檢索到的數據忽略換行符
- 6. 網站數據庫重複記錄
- 7. 數據倉庫中的重疊記錄
- 8. 如何統計數據庫中重複記錄的數量?
- 9. 總結數據框忽略重複
- 10. 合併數據表而忽略重複的行
- 11. 從數據庫到數組的記錄
- 12. 只將csv中的重複記錄插入到數據庫中
- 13. SqlBulkCopy的從CSV到SQL數據表
- 14. 忽略EmberJS數據中的已更改記錄
- 15. 如何在使用MYSQL從數據庫中檢索數據時忽略foreach循環中的重複行
- 16. Zend_Form:帶有複選框的HTML表中的數據庫記錄
- 17. 在大型數據庫表中標記重複記錄的最快方法
- 18. Spring驗證器在數據庫中的重複記錄
- 19. 消除實體框架數據庫中的重複記錄
- 20. 如何維護數據庫中的重複記錄?
- 21. 只顯示數據庫中的重複記錄
- 22. Django重複數據庫中的現有記錄
- 23. 使用vb.net檢查sql數據庫中的重複記錄
- 24. 糾正SQL Server數據庫中的重複記錄
- 25. Linq to SQL忽略第一個數據庫記錄
- 26. 在數據庫表上記錄數據
- 27. Python重複數據刪除記錄 - 重複數據刪除
- 28. 如何忽略列中不包含數據的重複行
- 29. 導入數據並忽略SQL Server中的重複項
- 30. Dockerized Neo4j忽略以前的數據庫
你記錄中的主鍵是什麼?該記錄是否沒有主鍵? –
一個可能的解決方案是使該表的列唯一。爲此,我們必須在表格中創建一個索引,並使用列名稱來檢查唯一性。 –