2013-07-23 1 views
1

필자는 자동 완성 기능에서 사용할 DB 저장 프로 시저를 개발해야합니다. 사용자가 "M"을 입력하면 사람과 그룹을 "M"으로 시작하는 이름으로 반환해야합니다.저장 프로 시저의 두 테이블에서 정보를 검색하는 방법은 무엇입니까?

DB를 두 번 호출하는 비용을 피하기 위해 시스템에서 하나의 저장 프로 시저 만 호출해야하는 방식으로이 작업을 수행하고 싶습니다.

내 문제는 그룹 사람들이 별도의 테이블에 있다는 것입니다 (난 그냥 필요가 자신과 및 ID), 이것이 내가 이상적으로 할 것 인 것이다 :

선택 ID, 이름을 이름 M '같은 사람 또는 그룹에서 % '

물론 이것은 유효한 SQL이 아닙니다. 임시 테이블을 만드는 것에 대해 생각해 보았습니다.이 테이블에 삽입하고 반환하는 2 개의 선택 (사람과 그룹에 하나)을 만들려고했습니다.

구현 방법이 더 간단하거나 좋은 방법이 있습니까? 아니면 가장 좋은 방법입니까?

답변

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 열이 유니 코드 문자열을 지원하는 (따라서 NVARCHAR 일)한다

+2

'ID, 이름을 가정 P '... 노조에서 모두 ... 이드, 네임,'G ''라고 말하면됩니다. – Tim

+2

@ user2246674 그건 말도 안돼. 이것을 임시 SQL 대 저장 프로 시저의 종교적 주장으로 바꾸지 마십시오. [이미 너무 많은 것을 가지고 있습니다.] (http://stackoverflow.com/search?q=query+vs.+stored+procedure+%5Bsql-server%5D+is%3Aquestion). 영업 담당자는 명확하게 그들이 저장 프로 시저를 원한다고 말했다. –

+0

@ user2246674 adhoc을 더 간단하게/더 좋은 방법으로 사용하는 방법은 무엇입니까? 그것이 더 간단하다고 생각한다면 코드를 게시하고 자신을 설명하십시오. – swasheck