2013-03-25 47 views
-2

我有這樣的SQL過程語句,但沒有成功,因爲變量:SQL過程變量

CREATE PROCEDURE iskanje(@iskani_niz) 
BEGIN 
SELECT A.ime, A.opis, B.kategorija 
FROM file as A, cathegory as B 
WHERE A.ime LIKE '%'[email protected]_niz+'%' 
OR A.opis LIKE '%'[email protected]_niz+'%' 
OR B.kategorija LIKE '%'[email protected]_niz+'%'; 
END 
+5

其中RDBMS是你使用? – Yuck 2013-03-25 15:22:07

+1

那麼,你需要給你的參數**一個數據類型! 'iskanje(@iskani_niz INT)'或'iskanje(@iskani_niz VARCHAR(50))'或者其他參數真的是! – 2013-03-25 15:23:54

+0

另外,我沒有看到加入'WHERE'子句。 'file'和'cathegory'加入了哪些列? – JohnZ 2013-03-25 16:56:20

回答

1

林對於遲到的回答很抱歉......我發現的是,有在SQL和mysql程序differend語法......所以,真正的語法應該是這樣的:

set delimiter // 

create procedure iskanje(in naziv varchar(10)) 

BEGIN 
    SELECT A.ime, A.opis, B.kategorija 
    FROM file as A, cathegory as B 
    WHERE A.ime LIKE concat('%',naziv,'%') 
     OR A.opis LIKE concat('%',naziv,'%') 
     OR B.kategorija LIKE concat('%',naziv,'%'); 
END// 

set delimiter ; 
0

試試這個,而不是你的參數中聲明的程序:

CREATE PROCEDURE iskanje 
    @iskani_niz nvarchar(max) 
AS BEGIN 

SELECT A.ime, A.opis, B.kategorija 
FROM file as A, cathegory as B 
WHERE A.ime LIKE '%'[email protected]_niz+'%' 
    OR A.opis LIKE '%'[email protected]_niz+'%' 
    OR B.kategorija LIKE '%'[email protected]_niz+'%'; 

END 

注意,你應該指定比nvarchar(max)更好的類型,我根據您在SELECT聲明中的使用情況假設了這種類型。

+0

我得到這個錯誤: #1064 - 你的錯誤在你的...正確的語法附近使用'declare(A)iskalni_niz varchar(10)set(A)iskalni_niz ='ad'SELECT A.ime, A.opi'在第1行 – MoOoG 2013-03-25 17:34:53