2012-07-11 33 views
6

Tôi cần truy vấn SQL sẽ cập nhật hoặc tạo mục nhập cơ sở dữ liệu (nếu một khách hàng nào đó chưa tồn tại). Tôi tìm thấy giải pháp hiện tại trên internet:Thực hành tốt về REPLACE INTO có tốt không?

command.CommandText = "REPLACE INTO [Resource_Tracer].[dbo].[Customer](CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID)" 

Vì tôi không thấy nó được sử dụng rất nhiều và thực sự chưa bao giờ nghe nói về nó trước, điều này thực sự là giải pháp tôi muốn, hay tôi nên làm điều này bằng tay?

Trả lời

5

Cả hai REPLACE INTO và đề xuất thay thế ON DUPLICATE KEY là SQL không chuẩn từ biến thể MySQL. Vì vậy, cho dù bạn sử dụng nó phụ thuộc vào a) cho dù bạn đang sử dụng MySQl và b) cho dù bạn muốn được gắn với biến thể đó.

ANSI SQL định nghĩa một cú pháp MERGE đó là tiêu chuẩn hơn, nếu nó được thực hiện trên nền tảng của bạn

+0

Bài đăng này: http: // stackoverflow. com/a/10733485/1274398 gợi ý rằng nó hoạt động từ Sql Server 2008 và trên các phường. Tôi không thể biết nếu người dùng sử dụng Sql Server 2005 hoặc 2008, họ được tự do lựa chọn. Có tương đương năm 2005 không? –

+1

Nó đã được giới thiệu vào SQL Server trong phiên bản 2008. Không có tương đương trực tiếp trong SQL 2005. Điều này có thể cung cấp cho bạn một số gợi ý: http://sqlserver-tips.blogspot.co.uk/2006/09/mimicking-merge-statement-in-sql.html – podiluska

2

nó là phổ biến hơn để sử dụng

INSERT INTO table col1) VALUES (1) 
ON DUPLICATE KEY UPDATE col1=VALUES(Col1) 

replace into thực sự xóa một mục trùng lặp và chèn một hình mới.

+0

Vì vậy, dịch nó nên là:.. command.CommandText = "INSERT INTO [Resource_Tracer] [dbo] [ Khách hàng] (CustomerName, CustomerID) GIÁ TRỊ (@CustomerName, @CustomerID) VỀ CẬP NHẬT KEY DUPLICATE [Resource_Tracer]. [Dbo]. [Customer] (CustomerName, CustomerID) VALUES (@CustomerName, @CustomerID) "? –

+0

Tôi không nhận thấy bạn đang sử dụng MSSQL. Sau đó, bạn nên nhìn vào 'MERGE'. Xem [bài đăng này] (http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –

Các vấn đề liên quan