2012-11-01 44 views
0

我在寫一個存儲過程,但我無法弄清楚編譯器不會給我任何錯誤規範。只是說它說查詢完成有錯誤。我不能看到錯誤..?!SQL Server使用AND與IF?

這是用作更新兩個表的存儲過程,代碼本身非常明瞭。

SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[insertRankingData] 
@domannamn [varchar](100), 
@keyword [varchar](100), 
@dagensdatum [Date], 
@rankingposition [Decimal] 
AS 
DECLARE @domanID int 
DECLARE @datumen date 

IF(SELECT COUNT(*) FROM [dbo].[t_doman] WHERE doman_namn = @domannamn) = 0 
BEGIN 
INSERT INTO [dbo].[t_doman] (doman_namn) 
    VALUES(@domannamn) 

    SELECT @domanID = SCOPE_IDENTITY() 
SELECT @todaysdate = GETDATE() 
END 
ELSE 
BEGIN 
SELECT @domanID = [doman_id] 
    FROM [dbo].[t_doman] 
    WHERE doman_namn = @domannamn 

SELECT @todaysdate = GETDATE() 
END 

IF NOT @domanID IS NULL 
BEGIN 
IF NOT EXISTS (SELECT (ranking_date, ranking_keyword, ranking_id_doman) 
        FROM [dbo].[t_ranking] 
        WHERE ranking_id_doman = @domanID 
        AND ranking_keyword = @keyword 
        AND ranking_date = @datumen) 
BEGIN 

     INSERT INTO [dbo].[t_ranking] (ranking_id_doman, ranking_date, ranking_position, ranking_keyword) 
     VALUES(@domanID, @todaysdate, @rankingposition, @keyword)  
END 
ELSE 
BEGIN 
     UPDATE [dbo].[t_ranking] 
     SET ranking_position = @rankingposition 
     WHERE ranking_date = @todaysdate 
     AND ranking_keyword = @keyword 
     AND ranking_id_doman = @domanID 
END 
    END 
+0

您是否檢查過日誌? – JYelton

回答

1

試試這個:

ALTER PROCEDURE [dbo].[insertRankingData] 
@domannamn [varchar](100), 
@keyword [varchar](100), 
@dagensdatum [Date], 
@rankingposition [Decimal] 
AS 
DECLARE @domanID int 
DECLARE @datumen date 
IF EXISTS(SELECT 1 FROM [dbo].[t_doman] WHERE doman_namn = @domannamn) 
BEGIN 
INSERT INTO [dbo].[t_doman] (doman_namn) VALUES(@domannamn) 
SELECT @domanID = SCOPE_IDENTITY() 
SELECT @todaysdate = GETDATE() 
END 
ELSE 
BEGIN 
SELECT @domanID = [doman_id] FROM [dbo].[t_doman] WHERE doman_namn = @domannamn 
SELECT @todaysdate = GETDATE() 
END 
IF @domanID IS NOT NULL 
BEGIN 
IF NOT EXISTS (SELECT ranking_date, ranking_keyword, ranking_id_doman 
        FROM [dbo].[t_ranking] 
        WHERE ranking_id_doman = @domanID 
        AND ranking_keyword = @keyword 
        AND ranking_date = @datumen) 
BEGIN 
INSERT INTO [dbo].[t_ranking] (ranking_id_doman, ranking_date, ranking_position, ranking_keyword) 
    VALUES(@domanID, @todaysdate, @rankingposition, @keyword) 
END 
ELSE 
BEGIN 
    UPDATE [dbo].[t_ranking] 
    SET ranking_position = @rankingposition 
    WHERE ranking_date = @todaysdate 
    AND ranking_keyword = @keyword 
    AND ranking_id_doman = @domanID 
END 
    END 

希望這有助於!

+0

解決了它;)我不知道什麼,但我得到了我的消息,我看到我用了一個未聲明的變量;)在接下來的6分鐘內接受! – 8bitcat

+1

@praveen除了格式之外,你有什麼改變? –