Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

tsql mengembalikan tabel dari fungsi atau prosedur toko

Anda tidak dapat mengakses Tabel Sementara dari dalam Fungsi SQL. Anda perlu menggunakan variabel tabel jadi intinya:

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

Sunting

Berdasarkan komentar untuk pertanyaan ini di sini adalah rekomendasi saya. Anda ingin menggabungkan hasil dari prosedur atau fungsi bernilai tabel dalam kueri lain. Saya akan menunjukkan kepada Anda bagaimana Anda dapat melakukannya kemudian Anda memilih yang Anda inginkan. Saya akan menggunakan kode sampel dari salah satu skema saya, tetapi Anda harus dapat menyesuaikannya. Keduanya adalah solusi yang layak pertama dengan prosedur tersimpan.

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

Dalam hal ini, Anda harus mendeklarasikan tabel sementara atau variabel tabel untuk menyimpan hasil prosedur. Sekarang Mari kita lihat bagaimana Anda akan melakukan ini jika Anda menggunakan UDF

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

Seperti yang Anda lihat, UDF jauh lebih ringkas dan lebih mudah dibaca, dan mungkin kinerjanya sedikit lebih baik karena Anda tidak menggunakan tabel sementara sekunder (kinerja hanya tebakan saya).

Jika Anda akan menggunakan kembali fungsi/prosedur Anda di banyak tempat lain, saya pikir UDF adalah pilihan terbaik Anda. Satu-satunya tangkapan adalah Anda harus berhenti menggunakan tabel #Temp dan menggunakan variabel tabel. Kecuali Anda mengindeks tabel temp Anda, seharusnya tidak ada masalah, dan Anda akan menggunakan tempDb lebih sedikit karena variabel tabel disimpan dalam memori.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa gunanya Katalog Awal dalam string koneksi SQL Server?

  2. Aplikasi C# multi-threading dengan panggilan database SQL Server

  3. 4 Alasan Mengapa Anda Harus Memprioritaskan Pemantauan Database dalam Perencanaan 2020

  4. DELETE Massal di SQL Server 2008 (Apakah ada yang seperti Bulk Copy (bcp) untuk menghapus data?)

  5. Masalah penyebaran laporan SSRS 2014