Как я могу вернуть таблицы с разным количеством параметров с процедурой? - PullRequest
0 голосов
/ 31 октября 2019

Я собираюсь создать разные временные таблицы в зависимости от получаемого параметра @selection, а затем я хочу вернуть созданную мной таблицу.

Я действительно хотел сделать это с помощью функции, но яполучил ошибку для переменных таблиц параметров. Процедура sql, которую я написал, выглядит следующим образом:

ALTER PROCEDURE [dbo].[Report]
    (@Id BIGINT = 55,
     @selection INT)
AS
BEGIN
 IF @selection=1
 BEGIN
 Declare @tep_table table (Id int
  ,Name varchar(250)
  ,CreateTime datetime
  ,UpdateTime datetime
  ,UpdatedBy varchar(250)
  ,Deleted bit
  )
 Insert into @tep_table 
 Select * from User
 END
IF @selection=1
 BEGIN
 Declare @tep_table2 table (Id int
  ,CreateTime datetime
  ,UpdateTime datetime
  ,UpdatedBy varchar(250)
  ,Deleted bit
  )
 Insert into @tep_table2 
 Select * from Client
 END


 IF @selection=1
 BEGIN
 RETURN @tep_table
 END
 ELSE
 BEGIN
 RETURN @tep_table2
 END
 END

Я получаю эту ошибку:

Необходимо объявить скалярную переменную "@tep_table"

1 Ответ

1 голос
/ 31 октября 2019

Лично я бы превратил это в три процедуры, чтобы избежать проблем с производительностью, с которыми сталкиваются несколько путей выполнения.

Примерно так.

ALTER Procedure [dbo].[Report]
(
    @Id bigint = 55 --not sure what the point of this parameter is as it wasn't used anywhere in the sample code
    , @selection int
) AS
    set nocount on;

    IF @selection = 1
        exec GetUserData;

    IF @selection = 2
        exec GetClientData;

GO

create procedure GetUserData 
AS
    set nocount on;

    Select * --would prefer to use column names here instead of * 
    from [User];

GO

create procedure GetClientData
AS
    set nocount on;

    Select * --would prefer to use column names here instead of *
    from Client;

GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...