Создайте хранимую процедуру, которая включает записи возврата - PullRequest
0 голосов
/ 05 июня 2019

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

Хранимая процедура включает в себя только оператор select с фильтром предложения where по параметрам.

Как я могу вернуть эти записи «вызывающему»?
Я пытался вставить эти записи во временную таблицу следующим образом:

create procedure xxx
drop table table_temp
select * into table_temp from table where parameters

Дело в том, что если два пользователя вызывают хранимую процедурув то же время они получат смешанные результаты.

Любое предложение по этой дилемме высоко ценится.

1 Ответ

0 голосов
/ 05 июня 2019

Вы можете использовать временную таблицу, как указано выше, или использовать тип таблицы (я использую демонстрационную базу данных AdventureWorks2014 для этих примеров):

CREATE PROCEDURE TableVariableDemo(
   @Color nvarchar(15),
   @Size nvarchar(5))
AS
BEGIN
   DECLARE @Results TABLE(ProductID int, [Name] nvarchar(255), ProductNumber nvarchar(25), Color nvarchar(15), Size nvarchar(5))

   INSERT INTO @Results (ProductID, [Name], ProductNumber, Color, Size)
   SELECT
      ProductID,
      [Name],
      ProductNumber,
      Color,
      Size
   FROM
      Production.Product
   WHERE
      Color = @Color AND
      Size = @Size

   SELECT
      ProductID,
      [Name],
      ProductNumber,
      Color,
      Size
   FROM
      @Results
END

Решение хорошо, когда вы ожидаете не слишком многостроки возвращаются.Когда вы ожидаете много строк, возвращаемых запросом, лучше использовать временную таблицу.То же самое с использованием временной таблицы:

 CREATE PROCEDURE TempTableDemo(
    @Color nvarchar(15),
    @Size nvarchar(5))
 AS
 BEGIN
   CREATE TABLE #Results(ProductID int, [Name] nvarchar(255), ProductNumber nvarchar(25), Color nvarchar(15), Size nvarchar(5))

   INSERT INTO #Results (ProductID, [Name], ProductNumber, Color, Size)
   SELECT
      ProductID,
      [Name],
      ProductNumber,
      Color,
      Size
   FROM
      Production.Product
   WHERE
      Color = @Color AND
      Size = @Size

   SELECT
      ProductID,
      [Name],
      ProductNumber,
      Color,
      Size
   FROM
      #Results

   DROP TABLE #Results
END

Но мне интересно, почему вы не используете что-то вроде этого:

 CREATE PROCEDURE SelectDemo(
    @Color nvarchar(15),
    @Size nvarchar(5))
 AS
 BEGIN
   SELECT
      ProductID,
      [Name],
      ProductNumber,
      Color,
      Size
   FROM
      Production.Product
   WHERE
      Color = @Color AND
      Size = @Size
END

С наилучшими пожеланиями
Майкл

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