2012-02-06 37 views
6

Tôi đang cố gắng nhập các giá trị vào bảng của tôi theo cách lập trình.chèn vào các giá trị với mệnh đề where

Tôi không thể sử dụng Select @variables thẳng. Tôi phải sử dụng giá trị từ khóa.

Làm cách nào tôi có thể tạo mệnh đề where khi sử dụng Giá trị khi chèn vào.

Tôi cố gắng để tránh trùng lặp

DECLARE @MyID INT 
    DECLARE @Phone varchar(10) 
    DECLARE @MyDATE DateTime 
    DECLARE @Agent as varchar(50) 
    DECLARE @Charge as varchar(50) 
    DECLARE @Vendor as varchar(50) 

    SET @MyID = 215199999 
    SET @Phone = '9999999999' 
    SET @MyDATE = '2010-12-04 11:56:12.000' 
    SET @Agent = 'fbrown' 
    SET @Charge = 'NO' 
    SET @Vendor = 'NO' 

    INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) WHERE MyID NOT IN (@MyID) 
+0

Tại sao bạn sử dụng mệnh đề where on a insert? Bạn có thực sự cố gắng chèn không trùng lặp? –

+0

Có. Cố gắng tránh trùng lặp –

+0

Nó không phải là một khái niệm. Nếu bạn đang chọn dữ liệu từ truy vấn khác, mệnh đề 'WHERE' có ý nghĩa trên nguồn dữ liệu. – HABO

Trả lời

22
IF NOT EXISTS(SELECT 1 FROM [MyDB].[dbo].[Accounts] WHERE MyID = @MyID) 
    INSERT INTO [MyDB].[dbo].[Accounts] 
     (MyID, Phone, MyDate, Agent, Charge, Vendor) 
     VALUES 
     (@MyID, @Phone, @MyDATE, @Agent, @Charge, @Vendor) 
1

Nếu bạn đang cố gắng để đảm bảo rằng các cột myid không chứa bất kỳ bản sao, bạn có ít nhất 3 lựa chọn: 1) làm cho cột duy nhất (tạo một chỉ mục trên cột đó và khai báo nó là duy nhất, hoặc, tốt hơn là, một khóa chính) 2) làm cho cột tự động tăng. Bằng cách này, bạn thậm chí không cần gán các giá trị cho nó. 4) bạn có thể sử dụng giải pháp của Joe Stefanelli (trên chủ đề này). Đó là lập trình thân thiện và alows bạn để chỉ định bất kỳ giá trị bạn muốn.

3

Hãy thử sử dụng

if not exists (select top 1 * from [MyDB].[dbo].[Accounts] Where MyID = @MyID) 
INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) 
+2

Đây là bản sao của http://stackoverflow.com/a/9166197/496972 –

+0

vâng bạn đúng, tôi chưa thấy câu trả lời của joe trong khi tôi đang đăng .. –

+0

Nếu thực sự tôi muốn xóa bài đăng của mình, chỉ cần cập nhật tôi vì vậy tôi có thể xóa bài viết của tôi –

0

Ngoài ra Merge (UPSERT) lựa chọn là một lựa chọn tốt cho một đơn thực thi. trong ví dụ này khi so khớp không được lấp đầy, nhưng bạn có thể thêm câu lệnh WHEN phù hợp và cập nhật dấu thời gian hoặc bộ đếm.

MERGE 
    Accounts AS target 
USING 
(select @MyID as myID) AS source 
ON 
    target.myID = source.myID 

WHEN NOT MATCHED THEN 
INSERT (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
); 
+0

Ps Chủ đề này là 4,5 tuổi. :-) – Tenzin

+4

@Tenzin Vì vậy, những gì? Nó không có nghĩa là mọi người không tìm kiếm câu trả lời cho cùng một câu hỏi nữa – DixonD

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