如何从存储过程中的两个不同表中检索信息?

时间:2013-07-23 21:49:52

标签: sql sql-server

我必须开发一个用于自动完成功能的数据库存储过程。如果用户键入“M”,我应该返回名称以“M”开头的人和组。

我想以系统应该只需要调用一个存储过程的方式来做到这一点,以避免两次调用DB的成本。

我的问题是群组和人员在单独的表格中(我只需要他们的ID和ID),这是我理想的做法:

从人员或组中选择ID,名称,例如'M%'

当然这不是一个有效的SQL。 我想创建一个临时表,进行2次选择(一个用于人和一个组),插入此表并返回它。

是否有更简单/更好的方式来实现它,或者这是最好的方法吗?

1 个答案:

答案 0 :(得分:4)

只需执行UNION ALL即可。两个单独的查询,临时表,多个插入,然后是第三个查询,听起来不是很多不必要的工作吗?

CREATE PROCEDURE dbo.SearchTwoTables
  @search_argument NVARCHAR(255) = N'M%'
AS
BEGIN
  SET NOCOUNT ON;

  SELECT ID, Name FROM dbo.People 
    WHERE Name LIKE @search_argument
  UNION ALL
  SELECT ID, Name FROM dbo.Group
    WHERE Name LIKE @search_argument;
END 
GO

另外我假设你的Name列应该支持Unicode字符串(因此是NVARCHAR),否则当你在保存时破坏他们的名字时你可能会发现一个生气的人......