我必须开发一个数据库存储过程以用于自动完成功能。如果用户键入“M”,我应该返回名称以“M”开头的人员和组。
我想这样做,系统应该只需要调用一个存储过程,以避免调用数据库两次的成本。
我的问题是组和人在单独的表中(我只需要他们的和和 ID),这是我理想的做法:
从人或组中选择 ID、名称,其中名称如“M%”
当然,这不是一个有效的 SQL。我考虑过创建一个临时表,进行 2 个选择(一个用于人员和一个组),插入此表并返回它。
有没有更简单/更好的方法来实现它,或者这是最好的方法?
我必须开发一个数据库存储过程以用于自动完成功能。如果用户键入“M”,我应该返回名称以“M”开头的人员和组。
我想这样做,系统应该只需要调用一个存储过程,以避免调用数据库两次的成本。
我的问题是组和人在单独的表中(我只需要他们的和和 ID),这是我理想的做法:
从人或组中选择 ID、名称,其中名称如“M%”
当然,这不是一个有效的 SQL。我考虑过创建一个临时表,进行 2 个选择(一个用于人员和一个组),插入此表并返回它。
有没有更简单/更好的方法来实现它,或者这是最好的方法?
只需执行一个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
),否则当您在保存时破坏他们的名字时,您可能会发现一个愤怒的人......