Saya memiliki kode berikut di salah satu Sql saya (2008) Disimpan Procs yang mengeksekusi dengan baik:
CREATE PROCEDURE [dbo].[Item_AddItem]
@CustomerId uniqueidentifier,
@Description nvarchar(100),
@Type int,
@Username nvarchar(100),
AS
BEGIN
DECLARE @TopRelatedItemId uniqueidentifier;
SET @TopRelatedItemId =
(
SELECT top(1) RelatedItemId
FROM RelatedItems
WHERE CustomerId = @CustomerId
)
DECLARE @TempItem TABLE
(
ItemId uniqueidentifier,
CustomerId uniqueidentifier,
Description nvarchar(100),
Type int,
Username nvarchar(100),
TimeStamp datetime
);
INSERT INTO Item
OUTPUT INSERTED.* INTO @TempItem
SELECT NEWID(), @CustomerId, @Description, @Type, @Username, GETDATE()
SELECT
ItemId,
CustomerId,
@TopRelatedItemId,
Description,
Type,
Username,
TimeStamp
FROM
@TempItem
END
GO
Jadi pertanyaan untuk kalian adalah apakah ada kemungkinan untuk melakukan sesuatu seperti:
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
Sehingga saya bisa menggunakan kembali data ini dari memori dalam pernyataan berikut lainnya? SQL Server cocok dengan pernyataan di atas, namun saya tidak ingin harus membuat variabel terpisah dan menginisialisasi masing-masing melalui pernyataan SELECT terpisah terhadap tabel yang sama .... UGH !!!
Ada saran tentang cara mencapai sesuatu di sepanjang baris tanpa beberapa pertanyaan terhadap tabel yang sama?
sql
sql-server
tsql
sql-server-2008
bleepzter
sumber
sumber
declare @t table
sekali, dan jika Anda perlu menggunakannya kembali, tembakDELETE @TempCustomer
sebelum memasukkan ke dalamnya lagiJawaban:
Anda tidak dapat PILIH .. MENJADI .. VARIABEL TABEL. Yang terbaik yang dapat Anda lakukan adalah membuatnya terlebih dahulu, lalu masukkan ke dalamnya. Cuplikan ke-2 Anda harus
sumber
Jika Anda ingin menetapkan beberapa variabel untuk digunakan nanti, Anda dapat melakukannya dalam satu kesempatan dengan sesuatu di sepanjang baris ini:
Jika itu tipe yang Anda cari
sumber
kamu bisa melakukan ini:
lalu nanti
Anda tidak perlu mendeklarasikan struktur #tempCustomer
sumber
DROP TABLE #tempCustomer
saat#tempCustomer
tidak diperlukan lagi jika tidak, pilih berikutnya akan menyebabkan#tempCustomer already exists
kesalahanSepertinya sintaks Anda sedikit keluar. Ini memiliki beberapa contoh bagus
Lalu nanti
sumber
Kedengarannya seperti Anda ingin tabel temp. http://www.sqlteam.com/article/turnal-tables
Perhatikan bahwa #TempTable tersedia di seluruh SP Anda.
Perhatikan bahwa ## TempTable tersedia untuk semua.
sumber
Saya menemukan pertanyaan Anda mencari solusi untuk masalah yang sama; dan jawaban lain yang gagal ditunjukkan adalah cara menggunakan variabel untuk mengubah nama tabel untuk setiap eksekusi prosedur Anda dalam bentuk permanen, bukan sementara.
Sejauh ini yang saya lakukan adalah menggabungkan seluruh kode SQL dengan variabel yang akan digunakan. Seperti ini:
Saya harap ini membantu, tetapi bisa jadi rumit jika kodenya terlalu besar, jadi jika Anda telah menemukan cara yang lebih baik, silakan bagikan!
sumber
Yang berarti membuat
@tempCustomer
tablevariable baru dan memasukkan data DARI Pelanggan. Anda sudah mendeklarasikannya di atas sehingga tidak perlu lagi menyatakan. Lebih baik pergisumber