2013-10-10 7 views
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 

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

Здесь мне нужно проверить, что ProducId это то же самое или нет? Если ProductId тот же, то Update, иначе Insert. >>> ??

+1

Вы можете использовать 'EXISTS' –

+0

@DarrenDavies ВЫХОДИТ является possible.but мне нужно проверять PRODUCTID имея ли то же YoutubeUrl затем обновить таблицу иначе Вставьте новый валус. – Arun

+1

добавил ответ –

ответ

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 
+0

@ Arun .. Если вы хотите проверить, что YoutubeURL также добавляет то же самое в состоянии ON –

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 
+0

uh, для того чтобы это было одновременно безопасным, системе необходимо будет заблокировать всю таблицу (по крайней мере, от записи). Вероятно, вы должны указать на это в своем ответе, если это важно для оценки эффективности. –

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 [email protected] 

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

END 

если и хотят, чтобы проверить запись вставлена ​​или нет, то и может принимать одно из параметра и Chek recored вставляется или нет.

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 [email protected] 

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 
Смежные вопросы