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.