Sql 是否有其他方法编写此查询?(我得到“子查询返回的值超过1个错误”;
我正在创建一个函数,其中我必须以逗号分隔的形式传递多个Id(假设a.Id)(int),如(2,3)值,结果将是与这些Id相关的值(int)。假设如果我传递了(2,3),结果应该如(8,9,7,5)所示 它显示以下错误: 子查询返回的值超过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
您可以在查询中使用前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