Sql 数据集返回错误“;必须声明标量变量…”;
我试图向我的数据集添加一个查询,但得到一个错误“必须声明标量变量@searchstr”。我觉得这有点奇怪,因为在没有问题之前我已经使用@variable来传递参数,但不管出于什么原因,它在这里失败了Sql 数据集返回错误“;必须声明标量变量…”;,sql,sql-server,dataset,Sql,Sql Server,Dataset,我试图向我的数据集添加一个查询,但得到一个错误“必须声明标量变量@searchstr”。我觉得这有点奇怪,因为在没有问题之前我已经使用@variable来传递参数,但不管出于什么原因,它在这里失败了 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.g
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中也失败了,所以再添加一点信息,尽管遗憾的是这在数据集中仍然不起作用-(以下内容适用于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
我做错了什么让我绊倒了?怀疑什么时候让我绊倒了?可能在sql中没有错误,但在另一个位置(参数定义等)?可能会感到困惑,因为您没有在WHERE语句中使用参数。乍一看,这与您在SQL Server上应该做的事情不一样,因为它不会影响返回的特定行
也许可以提供更多关于您实际希望通过此SQL实现什么的信息?我建议尝试此操作,以强制解析器获取参数
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)
我不知道为什么它会给你你提到的错误,但我很好奇为什么你声明
@searchstr
为nvarchar(64)
。siteguid
是否不是作为唯一标识符键入的?
?哦,我只是想把一些代码放在一起,看看我的SQL在哪里有效。似乎工作正常,我希望把它编入我的数据集中,但是你不能在数据集中使用DECLARE或SET查询。我放弃了,在不使用CASE或WHEN语句的情况下重写了查询。Som我注意到顶部示例@searchstr应该作为参数出现在数据集上,但它不是。但是,当我添加创建参数的位置条件时,它会根据条目是否存在,返回第一列和0或1中第二列的布尔值。