Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 是否有其他方法编写此查询?(我得到“子查询返回的值超过1个错误”;_Sql_Sql Server_Database - Fatal编程技术网

Sql 是否有其他方法编写此查询?(我得到“子查询返回的值超过1个错误”;

Sql 是否有其他方法编写此查询?(我得到“子查询返回的值超过1个错误”;,sql,sql-server,database,Sql,Sql Server,Database,我正在创建一个函数,其中我必须以逗号分隔的形式传递多个Id(假设a.Id)(int),如(2,3)值,结果将是与这些Id相关的值(int)。假设如果我传递了(2,3),结果应该如(8,9,7,5)所示 它显示以下错误: 子查询返回的值超过1。当 子查询遵循=、!=、=或使用子查询时 作为一种表达 您可以在查询中使用前1。因为您将值赋给变量,并且它只从查询中获取一个返回值 declare @roleid varchar(max) set @roleid=(select TOP 1 mr.Id

我正在创建一个函数,其中我必须以逗号分隔的形式传递多个Id(假设a.Id)(int),如(2,3)值,结果将是与这些Id相关的值(int)。假设如果我传递了(2,3),结果应该如(8,9,7,5)所示

它显示以下错误:

子查询返回的值超过1。当 子查询遵循=、!=、=或使用子查询时 作为一种表达


您可以在查询中使用前1。因为您将值赋给变量,并且它只从查询中获取一个返回值

declare @roleid varchar(max)  
set @roleid=(select TOP 1 mr.Id from M_Organization mo
join m_role mr on mr.Id=mo.RoleId 
cross apply STRING_SPLIT ('3,4', ',') cs WHERE mo.Id IN (cs.value)
)
select @roleid
你可以试试这个

declare @roleid varchar(max)  
set @roleid=(select top 1 mr.Id from M_Organization mo
join m_role mr on mr.Id=mo.RoleId 
cross apply STRING_SPLIT ('3,4', ',') cs WHERE mo.Id IN (cs.value)
)
select @roleid

知道了,谢谢You@john897我认为这段代码不正确。您是否打算从m_角色表中获取第一个ID?如果是这样,当然-您很好。但是您获取
子查询返回的值超过1个的原因是因为存在多个匹配项。您需要收紧逻辑。@AngryHacker是的,这是syntactical正确但为了逻辑上正确输出,我还认为他们需要在存储数据时或在选择/更新时在模式中更改逻辑。@SurajKumar是的,我不是在质疑你的代码,而是对john897的代码逻辑提出质疑。@AngryHacker实际逻辑是假设我们有程序Id,当我们通过这些Id时,我必须得到子代码程序id位于所有这些程序的逗号分隔值下…上面带top子句的查询返回准确的值..我的查询在逻辑上正确吗???整个函数不同,但这是查询的主要部分
declare @roleid varchar(max)  
set @roleid=(select top 1 mr.Id from M_Organization mo
join m_role mr on mr.Id=mo.RoleId 
cross apply STRING_SPLIT ('3,4', ',') cs WHERE mo.Id IN (cs.value)
)
select @roleid