Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

tsql trả về một bảng từ một hàm hoặc thủ tục lưu trữ

Bạn không thể truy cập Bảng tạm thời từ bên trong Hàm SQL. Về cơ bản, bạn sẽ cần sử dụng các biến bảng:

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

Chỉnh sửa

Dựa trên nhận xét cho câu hỏi này, đây là khuyến nghị của tôi. Bạn muốn nối kết quả của một thủ tục hoặc hàm có giá trị bảng trong một truy vấn khác. Tôi sẽ chỉ cho bạn cách bạn có thể làm điều đó sau đó bạn chọn một trong những bạn thích. Tôi sẽ sử dụng mã mẫu từ một trong các lược đồ của mình, nhưng bạn có thể điều chỉnh nó. Cả hai đều là những giải pháp khả thi trước hết với một quy trình được lưu trữ.

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

Trong trường hợp này, bạn phải khai báo một bảng tạm thời hoặc một biến bảng để lưu trữ kết quả của thủ tục. Bây giờ, hãy xem bạn sẽ thực hiện việc này như thế nào nếu bạn đang sử dụng UDF

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

Như bạn có thể thấy, UDF dễ đọc ngắn gọn hơn rất nhiều và có thể hoạt động tốt hơn một chút vì bạn không sử dụng bảng tạm thời phụ (hiệu suất hoàn toàn là do tôi đoán).

Nếu bạn định sử dụng lại hàm / thủ tục của mình ở nhiều nơi khác, tôi nghĩ UDF là lựa chọn tốt nhất của bạn. Cách duy nhất là bạn sẽ phải ngừng sử dụng bảng #Temp và sử dụng các biến bảng. Trừ khi bạn đang lập chỉ mục bảng tạm thời của mình, sẽ không có vấn đề gì và bạn sẽ sử dụng tempDb ít hơn vì các biến bảng được lưu trong bộ nhớ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xuất tất cả dữ liệu từ bảng sang định dạng sql có thể chèn?

  2. Cách SHOWPLAN_XML hoạt động trong SQL Server

  3. Trả lại Kiểu dữ liệu cơ sở từ SQL _ Giá trị biến thể trong SQL Server

  4. 4 Chức năng để định dạng một số thành 2 vị trí thập phân trong SQL Server

  5. Đếm dựa trên điều kiện trong SQL Server