存储过程以检查表中已有的值

时间:2013-10-10 08:54:01

标签: sql sql-server sql-server-2008 stored-procedures

我有一个存储过程将值插入到table.Here我需要检查insert中的值是否已经在表中。我可以在我的存储过程中检查这个。这是我的存储过程。

USE [Databasse_sync]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[kt_getyoutubevideo] 

    @ProductID nvarchar(200),
    @YoutubeUrl nvarchar(200),
    @YoutubeImage nvarchar(200)

AS

INSERT INTO YoutubeVideo(ProductID,YoutubeUrl,YoutubeImage,DATASET)VALUES(@ProductID,@YoutubeUrl,@YoutubeImage,'DAT')
RETURN

这里我需要检查ProducId是否相同?如果ProductId相同则更新否则插入。>>> ??

5 个答案:

答案 0 :(得分:1)

IF NOT EXISTS(SELECT TOP 1 ProductID FROM YoutubeVideo WHERE ProductID=@ProductID) BEGIN
    --INSERT HERE
END
ELSE BEGIN
    --UPDATE HERE
END

答案 1 :(得分:1)

  DECLARE @EXISTS BIT

  SELECT @EXISTS = 1 
  WHERE EXISTS 
        (SELECT ID FROM YouTubeVideo
         WHERE ID = @ProductID 
         AND YoutubeUrl = @YoutubeUrl)

  IF @Exists = 1
  BEGIN
    -- Update
  END
  ELSE
  BEGIN
    -- INSERT
  END

答案 2 :(得分:1)

USE [Databasse_sync]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[kt_getyoutubevideo] 

    @ProductID nvarchar(200),
    @YoutubeUrl nvarchar(200),
    @YoutubeImage nvarchar(200)

AS

MERGE [YoutubeVideo] AS Y
        USING (SELECT @ProductID,@YoutubeUrl, @YoutubeImage) AS SourceRow (ProductID,YoutubeUrl,YoutubeImage)
        ON Y.[ProductID] = SourceRow.ProductID
        WHEN MATCHED THEN
            UPDATE SET 
                Y.[ProductID] = SourceRow.ProductID
                ,Y.[YoutubeUrl] = SourceRow.YoutubeUrl
                ,Y.[YoutubeImage] = SourceRow.YoutubeImage

        WHEN NOT MATCHED THEN
            INSERT (ProductID,YoutubeUrl, YoutubeImage, DATASET)
            VALUES (SourceRow.ProductID,SourceRow.YoutubeUrl, SourceRow.YoutubeImage,'DAT');
RETURN

答案 3 :(得分:1)

@Arun

 ALTER PROCEDURE [dbo].[kt_getyoutubevideo] 

    @ProductID nvarchar(200),
    @YoutubeUrl nvarchar(200),
    @YoutubeImage nvarchar(200)

 AS
  BEGIN
     DECLARE @counter INT

     @counter=SELECT COUNT(ProductID) FROM YoutubeVideo WHERE ProductID=@ProductID

     IF(@counter = 0)
     BEGIN
         INSERT INTO YoutubeVideo(ProductID,YoutubeUrl,YoutubeImage,DATASET)VALUES(@ProductID,@YoutubeUrl,@YoutubeImage,'DAT')  
     END

END

如果你想检查记录是否被插入,那么你可以拿出一个参数并且chek recored是否被插入。

答案 4 :(得分:1)

试试这个:

ALTER PROCEDURE [dbo].[kt_getyoutubevideo] 

@ProductID nvarchar(200),
@YoutubeUrl nvarchar(200),
@YoutubeImage nvarchar(200)

AS BEGIN

 DECLARE @counter int 


 @counter = SELECT count(ProductID) FROM YoutubeVideo WHERE ProductID=@ProductID

 IF(@counter = 0)
 BEGIN
     INSERT INTO YoutubeVideo(ProductID,YoutubeUrl,YoutubeImage,DATASET)VALUES(@ProductID,@YoutubeUrl,@YoutubeImage,'DAT') 
     End

 ELSE
 begin
 UPDATE SET 
            ProductID = @ProductID
            ,YoutubeUrl = @YoutubeUrl
            ,YoutubeImage = @YoutubeImage 
 END      END