1

以下代码根据另一行中的值将新行插入到表中,但它也允许重复数据。我想使用 NOT EXISTS 以便如果已经有一行具有该值,那么它不会插入另一个,但不确定如何整合它。

INSERT INTO [Grading].[dbo].[tblObservations]
       ([FormID]
       ,[Data]
       ,[UserID]
       ,[DateOfObservation]
       ,[Final]
       ,[ValidTo]
       ,[ID_Grading]
       ,[ID_ObservationKind]
       ,[Created]
       ,[Modified]
       ,[RowVersion])
SELECT [FormID]
  ,'0'
  ,[UserID]
  ,[DateOfObservation]
  ,[Final]
  ,[ValidTo]
  ,[ID_Grading]
  ,40
  ,[Created]
  ,[Modified]
  ,[RowVersion]
  FROM [Grading].[dbo].[tblObservations]
  WHERE [ID_ObservationKind] = 39 AND [Data] = 'No' AND [Final] = 1

任何帮助表示赞赏。

4

3 回答 3

1

你可以试试

IF NOT EXISTS
    (
    SELECT 1
FROM [Grading].[dbo].[tblObservations]
WHERE [ID_ObservationKind] = 39 AND [Data] = 'No' AND [Final] = 1
    )

    BEGIN
        -- Insert script
    END
于 2013-04-23T07:26:56.480 回答
1

试试这个——

USE [Grading]

INSERT INTO [dbo].[tblObservations]
(
      FormID
    , Data
    , UserID
    , DateOfObservation
    , Final
    , ValidTo
    , ID_Grading
    , ID_ObservationKind
    , Created
    , Modified
    , [RowVersion]
)
SELECT 
      t.FormID
    , '0'
    , t.UserID
    , t.DateOfObservation
    , t.Final
    , t.ValidTo
    , t.ID_Grading
    , 40
    , t.Created
    , t.Modified
    , t.[RowVersion]
FROM dbo.tblObservations t
LEFT JOIN dbo.tblObservations t2 ON 
        t.FormID = t2.FormID
    AND t2.Data = '0'
    AND t.UserID = t2.UserID
    AND t.DateOfObservation = t2.DateOfObservation
    AND t.Final = t2.Final
    AND t.ValidTo = t2.ValidTo
    AND t.ID_Grading = t2.ID_Grading
    AND t2.ID_ObservationKind = 40
    AND t.Created = t2.Created
    AND t.Modified = t2.Modified
    AND t.[RowVersion] = t2.[RowVersion]
WHERE t.ID_ObservationKind = 39 
    AND t.Data = 'No' 
    AND t.Final = 1
    AND t2.FormID IS NULL

或者试试这个 -

INSERT INTO [dbo].[tblObservations]
(
      FormID
    , Data
    , UserID
    , DateOfObservation
    , Final
    , ValidTo
    , ID_Grading
    , ID_ObservationKind
    , Created
    , Modified
    , [RowVersion]
)
SELECT 
      t.FormID
    , '0'
    , t.UserID
    , t.DateOfObservation
    , t.Final
    , t.ValidTo
    , t.ID_Grading
    , 40
    , t.Created
    , t.Modified
    , t.[RowVersion]
FROM dbo.tblObservations t
WHERE t.ID_ObservationKind = 39 
    AND t.Data = 'No' 
    AND t.Final = 1
    AND NOT EXISTS(
        SELECT 1 
        FROM dbo.tblObservations t2
        WHERE t2.ID_ObservationKind = 39 
            AND t2.Data = 'No' 
            AND t2.Final = 1
    )
于 2013-04-23T07:31:35.140 回答
0

您正在寻找在 SQL 中进行“合并”或“更新插入”。根据您的数据库,有多种方法可以做到这一点。如果你使用 MySQL,你会想要使用它的 INSERT... ON DUPLICATE KEY UPDATE 语法。

于 2013-04-23T07:27:40.860 回答