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