Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

tsql връща таблица от функция или процедура за съхранение

Не можете да получите достъп до временни таблици от SQL функция. Ще трябва да използвате променливи в таблицата по същество:

ALTER FUNCTION FnGetCompanyIdWithCategories()
RETURNS  @rtnTable TABLE 
(
    -- columns returned by the function
    ID UNIQUEIDENTIFIER NOT NULL,
    Name nvarchar(255) NOT NULL
)
AS
BEGIN
DECLARE @TempTable table (id uniqueidentifier, name nvarchar(255)....)

insert into @myTable 
select from your stuff

--This select returns data
insert into @rtnTable
SELECT ID, name FROM @mytable 
return
END

Редактиране

Въз основа на коментарите към този въпрос ето моята препоръка. Искате да обедините резултатите от процедура или функция с таблична стойност в друга заявка. Ще ви покажа как можете да го направите, след което изберете този, който предпочитате. Ще използвам примерен код от една от моите схеми, но трябва да можете да го адаптирате. И двете са жизнеспособни решения, първо със съхранена процедура.

declare @table as table (id int, name nvarchar(50),templateid int,account nvarchar(50))

insert into @table
execute industry_getall

select * 
from @table 
inner join [user] 
    on account=[user].loginname

В този случай трябва да декларирате временна таблица или променлива на таблица, за да съхранявате резултатите от процедурата. Сега нека да разгледаме как бихте направили това, ако използвате UDF

select *
from fn_Industry_GetAll()
inner join [user] 
    on account=[user].loginname

Както можете да видите, UDF е много по-сбит, по-лесен за четене и вероятно се представя малко по-добре, тъй като не използвате вторичната временна таблица (производителността е пълно предположение от моя страна).

Ако ще използвате повторно вашата функция/процедура на много други места, мисля, че UDF е най-добрият ви избор. Единствената уловка е, че ще трябва да спрете да използвате таблици #Temp и да използвате таблични променливи. Освен ако не индексирате вашата временна таблица, не би трябвало да има проблем и ще използвате tempDb по-малко, тъй като променливите на таблицата се съхраняват в паметта.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разбиране на група по клауза в SQL Server - SQL Server / TSQL урок, част 130

  2. Заявката е неуспешна с HTTP състояние 401:Неупълномощено В SSRS

  3. Преобразувайте „datetimeoffset“ в „date“ в SQL Server (T-SQL примери)

  4. Как да намерите трета или nᵗʰ максимална заплата от таблицата със заплати?

  5. T-SQL:Обратно на конкатенацията на низове - как да разделите низ на множество записи