2010-07-14 83 views
0

我想添加一個查詢到我的數據集,並得到一個錯誤「必須聲明標量變量@searchstr」。我覺得這有點奇怪,因爲我已經使用@variable在沒有問題之前傳遞參數,但是無論出於何種原因它在這裏失敗。DataSet返回錯誤「必須聲明標量變量...」

select DISTINCT g.groupname, 
CASE WHEN s.siteguid = @searchstr THEN 1 ELSE 0 END AS doesitexist 
from groups g left outer join sitegroups as sg on g.groupguid = sg.groupguid 
left outer join sites as s on sg.siteguid = s.siteguid 

發現它在LINQPad失敗一樣,所以加點的詳細信息,但遺憾的是這仍然沒有在DataSet工作。 :-(在LINQPad和SQL Server Management Studio中的以下作品。

declare @searchstr nvarchar(64); 
set @searchstr = '21EC2020-3AEA-1069-A2DD-08002B30309D'; 
select DISTINCT g.groupname, 
CASE WHEN s.siteguid = @searchstr THEN 1 ELSE 0 END AS doesitexist 
from groups g left outer join sitegroups as sg on g.groupguid = sg.groupguid 
left outer join sites as s on sg.siteguid = s.siteguid 

我在做什麼錯那跳脫我嗎?犯罪嫌疑人時絆倒了我?

+0

我不知道爲什麼它是給你,你提到的錯誤,但我很好奇,爲什麼你宣佈'@ searchstr'到是一個'nvarchar(64)'。 'siteguid'沒有被輸入爲'uniqueidentifier'嗎? – Thomas 2010-07-14 14:14:11

+0

哦,我只是把一些代碼放在一起看看我的SQL是有效的。似乎工作正常,我只是希望把它變成我的數據集,但你不能在數據集查詢中使用DECLARE或SET – wonea 2010-07-14 16:08:47

+0

我放棄並重寫了查詢,而沒有使用CASE或WHEN語句。 – wonea 2010-07-16 15:08:42

回答

0

也許它不是在sql不正確,但在另一個位置(參數定義等)?

+0

我注意到的一點是,頂部示例@searchstr應該作爲參數出現在DataSet上,但事實並非如此。但是,當我添加WHERE條件時創建了一個參數。 – wonea 2010-07-14 16:07:03

+0

那麼不要添加哪裏並手動添加參數? – Tobiasopdenbrouw 2010-07-20 10:24:20

0

它可能是困惑,因爲你沒有使用WHERE語句中的參數。一目瞭然,這看起來不像你應該在SQL無論如何,因爲它不會影響返回的特定行。

也許給你一些關於你實際上想用這個SQL實現的更多信息?

+0

根據是否存在條目,它返回第一列和第二個0或1的BOOL值。 – wonea 2010-07-16 08:46:39

1

我建議嘗試這種強制解析器獲取參數

select DISTINCT g.groupname, 
CASE WHEN s.siteguid = @searchstr THEN 1 ELSE 0 END AS doesitexist 
from groups g left outer join sitegroups as sg on g.groupguid = sg.groupguid 
left outer join sites as s on sg.siteguid = s.siteguid 
WHERE (@searchstr = '' OR 1 = 1)