2010-07-14 3 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

+0

О, я просто собирал код, чтобы увидеть, где мой SQL был действительным. Кажется, что все нормально, я был в два раза в надежде выманить его в свой DataSet, но вы не можете использовать DECLARE или SET в запросе DataSet – wonea

+0

Я сдал и переписал запрос без использования операторов CASE или WHEN. – wonea

ответ

0

Может быть, это не неправильно в SQL , но в другом месте (определение параметра и т. д.)?

+0

Что-то, что я заметил, для верхнего примера @searchstr должен появиться на DataSet в качестве параметра, однако это не так. Однако, когда я добавляю условие WHERE, создается параметр. – wonea

+0

Так что не добавляйте где и вручную добавить параметр? – Tobiasopdenbrouw

0

Это, вероятно, запутано, потому что вы не используете параметр в инструкции WHERE. На первый взгляд это не похоже на то, что вы должны делать на SQL Сервер в любом случае, поскольку он не влияет на возвращаемые конкретные строки.

Возможно, вы получите немного больше информации о том, чего вы на самом деле хотите достичь с помощью этого SQL?

+0

Он возвращает первый столбец и значение BOOL для второго из 0 или 1 в зависимости от того, существует или нет запись. – wonea

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