2016-02-10 2 views
1

У меня есть хранимая процедура унаследованной, которая принимает список идентификаторов с помощью типа таблицы, которая в настоящее время используются непосредственно во всей системе:Как вернуть меньше столбцов из хранимой процедуры?

CREATE PROCEDURE [dbo].[DataLoadByList] 
(
    @CaseIds [dbo].[TTIdsList] READONLY 
) 
AS 
BEGIN 
    SELECT * 
    FROM tblCases cases 
    INNER JOIN @CaseIds Ids ON cases.CaseId = Ids.Id 
END 
GO 

У меня также есть хранимая процедура аналогичны унаследованная, который выполняет тот же запрос на единственный идентификатор (входной параметр), но возвращает два меньших столбца (т. е. не использует * в выбранных, но довольно разных именах столбцов).

Два доли более 90% кода, что приводит к дублированию кода и требует двойного написания каждого изменения ...

Я хотел бы вновь осуществлять единый порядок идентификатора хранится таким образом, что это только звонки хранимую процедуру на основе таблицы, но перед возвратом результата запроса отфильтруйте его так, чтобы он возвращал точно то, что он использовал для возврата («столько же столбцов минус два»).

Есть ли способ в SQL Server для этого?

ответ

3

В процедуре с одним идентификатором EXECUTE основанная на таблице процедура, сохраняющая результаты во временной таблице (или переменной таблицы).

Затем SELECT только нужные столбцы из временной таблицы.

+0

спасибо. Существует два способа выполнения во временной таблице: (1) Тот, который не требует жесткого кодирования столбцов таблицы temp, [но требует жесткого кодирования строки подключения] (http://stackoverflow.com/a/1228165/ 5769938). (2) Тот, который требует жесткого кодирования столбцов таблицы temp, но [не зависит от механизма базы данных, на котором он запущен] (http://stackoverflow.com/a/654418/5769938). В моих нынешних обстоятельствах я считаю, что мне нужен последний. – datps

Смежные вопросы