【问题标题】:Stored procedure to select from multiple tables从多个表中选择的存储过程
【发布时间】:2014-01-04 09:28:45
【问题描述】:

我创建了一个带有参数的存储过程

ALTER procedure [dbo].[myprocedure](@myName char(20))
as
   select param1
   from table1
   where name = @myName

现在这是可行的,但是当我尝试从其他表中选择参数时它不起作用我在第一次选择后尝试这样

(Select param2 table2)

但我明白了

MS 512,第 16 级,状态 1,程序候选,第 3 行
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

有谁知道如何使用 select 从多个表中获取值?谢谢

【问题讨论】:

  • 这是否意味着您想要来自 table1 的 Param1 和来自 table 2 的 Param2?在这种情况下,请使用 Union all
  • Union all 怎么用

标签: sql database sql-server-2008 stored-procedures


【解决方案1】:

在 Where 子句之后使用 IN 运算符而不是 =

ALTER procedure [dbo].[myprocedure](@myName char(20))
as

select param1
from table1
where name = @myName

---
select param1
from table1
where name IN (Select param2 from table2)

编辑

select param1
from table1
where name = @myName
union
Select param2
from table2

请注意,UNION 将在合并 table1 和 table2 的结果集后删除重复值。

要保留重复值,请使用UNION ALL

【讨论】:

  • 是的,但我怎样才能将名称与@myName 匹配
  • 所以您想将 table1 中的 name 列与 table2 的 param2 列以及参数 @myName 匹配?
  • 我想将 table1 中的名称列与@myName 匹配,并从表 2 中返回 param2
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 2010-12-10
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多