1

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

我想这样做,系统应该只需要调用一个存储过程,以避免调用数据库两次的成本。

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

从人或组中选择 ID、名称,其中名称如“M%”

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

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

4

1 回答 1

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),否则当您在保存时破坏他们的名字时,您可能会发现一个愤怒的人......

于 2013-07-23T21:51:36.360 回答