2015-08-24 68 views
0

我試圖執行一個簡單的IF語句。我有一張名爲'產品'的表,其中有一列count,它是該庫存中特定產品的當前計數。數據庫中的count列是數據類型INTSQL Server:不那麼簡單IF語句

我只能得到這個工作,如果我靜態分配變量@count。如果我將一個select語句分配給@count,腳本將失敗。即使單獨運行查詢也會返回結果。

工作查詢:

DECLARE @count INT 
SET @count = 2 

IF (@count > 1) 
    BEGIN 
     PRINT 'It works!' 
    END 

失敗查詢:

DECLARE @count INT 
SET @count = (SELECT TOP 1 count from products WHERE count > 1) 

IF (@count > 1) 
    BEGIN 
     PRINT 'It works!' 
    END 
+1

'SELECT TOP 1 count from products WHERE count> 1'當您運行此查詢時,結果是什麼 –

+0

[SET與SELECT分配變量時可能出現重複?](http://stackoverflow.com/questions/3945361/設置與選擇何時分配變量) – lad2025

+1

「count」是產品表中的列名稱,對不對? –

回答

0

嘗試:

DECLARE @count INT 
SET @count = isnull((SELECT TOP 1 [count] from products WHERE [count] > 1),0) 
IF (@count > 1) 
    BEGIN 
     PRINT 'It works!' 
    END 

計數是SQL Keyword這就是爲什麼你需要,當你使用任何keywordscolumn Name使用[]

0

代替具有設置=選擇簡單地使用選擇值分配給變量也COUNT是SQL Server使用方括號的一個關鍵字的[]如果你希望sql server把它當作一個對象名稱.....試試這個....

DECLARE @count INT 
SELECT TOP 1 @count = [count] from products WHERE count > 1 

IF (@count > 1) 
    BEGIN 
     PRINT 'It works!' 
    END 
1

您通常會使用EXISTS

IF EXISTS (SELECT * from products WHERE count > 1) 
    BEGIN 
     PRINT 'It works!' 
    END 
+0

是的,這個查詢預計會略有不同。我的最終結果是我需要[count]> 1被插入的所有行(重複行)並且總計數減少了一個。我只是試圖將我的問題分解到最低層:) –