Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据集返回错误“;必须声明标量变量…”;_Sql_Sql Server_Dataset - Fatal编程技术网

Sql 数据集返回错误“;必须声明标量变量…”;

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

我试图向我的数据集添加一个查询,但得到一个错误“必须声明标量变量@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.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中第二列的布尔值。