【问题标题】:Insert into table values only if one field value does not exist already仅当一个字段值不存在时才插入表值
【发布时间】:2014-12-16 02:43:13
【问题描述】:

我只想在 field_tag 值不存在时插入表中。我想在插入表之前检查..如果收据之前存在于相同的 field_tag 值下。如果不存在,那么只有我想插入。我正在使用 sql server 2008

INSERT INTO [INVENTORY].[TBL_RECEIPTS]
           ([TicketNbr]
       ,[RevisionNbr]
           ,[Location_ID]
           ,[ContractNumber]
           ,[Storage_ID]
       ,[VarietyID]
           ,[GrossWeight]
           ,[TareWeight]
           ,[Carrier]
           ,[Receipt_date]
           ,[Last_update]
           ,[Inv_weight]
       ,[SAPBatch]
       ,[MoistureFactor]
       ,[Load_Harvested]
       ,[FIELDID]
       ,[GROWER_LOAD_NBR]
       ,[HARVEST_NBR]
       ,[TRACE_WORMS]
       ,[COR_CERT]
       ,[GFF_DEST]
---    ,[GFF_CONTRACT]
       ,[CAB_ID]
       ,[sOURCE]
       ,[CREATED_BY]
       ,[TOTALBONUSES]
       ,[PIDNUMBER] 
       ,[CARRIERVENDORID]
       ,[HAUL_ZONE]
       ,[FIELD_Tag]
       ,[Station]
       ,[COUNTY]
       ,[GradeDate]
       ,[Load_Received]
       ,[Load_Processed]

)
     VALUES
           (@CERT
      ,@RevisionNbr
           ,@Location_ID
           ,@ContractNUmber
           ,@Storage_ID
       ,@VarietyID
           ,@Gross_Weight
           ,@TareWeight
           ,@CarrierName
           ,@receipt_date
           ,Getdate()
           ,@Inv_weight
       ,@receiptbATCHnbr
       ,@DockageWeight
       ,@HARVEST_DT
       ,@FIELDID
       ,@GROWER_LOAD_NBR
       ,@HARVEST_NUMBER
       ,@TRACE_WORMS    
       ,@COR_CERT
       ,@GFF_DEST
---    ,@CONTRACT
       ,@CAB_ID
       ,'I'
       ,'Scale Interface'
       ,0
       ,@ContractPIDNumber
       ,@CARRIERID
       ,@HAUL_ZONE
       ,@FIELD_TAG
       ,@STATION
       ,@COUNTY
       ,@GRADE_DT
       ,@Arrival_dt
       ,@current_Date
)

我确实喜欢这样:

insert into yourtable
(field1, field2, etc)
select value1, value2, etc
where not exists
( SELECT * FROM [INVENTORY].[TBL_RECEIPTS] WHERE Field_Tag = @FIELD_TAG)

如何打印错误,我想对此进行错误处理。如果有重复..它应该打印消息。

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    这样的事情应该可以工作。

    insert into yourtable
    (field1, field2, etc)
    select value1, value2, etc
    where not exists
    (subquery to specify
    condition under which you don't insert record)
    

    编辑从这里开始

    如果记录已经存在,另一种通知用户的方法

    declare @Records as int;
    set @Records = select count(*) from tbl_receipts
    where field_tag = @Field_Tag;
    
    if @Records > 0
    begin
    select 'record exists'
    end
    
    else
    begin
    insert query
    select 'record added'
    end
    

    【讨论】:

    • 有点类似,我想知道在子查询和条件中写什么。整个 sp 都在这里pastebin.com/0yFAXM59
    • 此语句中的 SELECT 语法不正确 set @Records = SELECT count(*) from [INVENTORY].[TBL_RECEIPTS] WHERE field_tag = @Field_Tag;
    【解决方案2】:

    它处于工作状态,请测试它。如果没有 imei=69212 和 description='dfhjsdfh' 的条目,将在数据库中输入 insert into events select 1,2,3 from ( select 1 from events where not exists ( select 1 from events where imei=69212 and description='dfhjsdfh' group by imei) group by imei) AS tt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多