क्या इसका स्कीमा ऊपर परिभाषित किए बिना एक अस्थायी तालिका को परिभाषित करने का कोई तरीका है?टीएसक्यूएल स्कीमा को परिभाषित किए बिना टेम्प तालिका (या तालिका चर) परिभाषित करें?
उत्तर
वास्तव में एक मेज चर, एक में स्मृति तालिका का उपयोग कर, जाने के लिए इष्टतम तरीका है। #table temp डीबी में एक टेबल बनाता है, और ## तालिका वैश्विक है - दोनों डिस्क हिट के साथ। लेनदेन की संख्या के साथ अनुभवी धीमी गति से/हिट पर विचार करें।
CREATE PROCEDURE [dbo].[GetAccounts]
@AccountID BIGINT,
@Result INT OUT,
@ErrorMessage VARCHAR(255) OUT
AS
BEGIN
SET NOCOUNT ON;
SET @Result = 0
SET @ErrorMessage = ''
DECLARE @tmp_Accounts TABLE (
AccountId BIGINT,
AccountName VARCHAR(50),
...
)
INSERT INTO @tmp_Accounts ([AccountId], [AccountName]...
)
SELECT AccountID, AccountName
FROM Accounts
WHERE ...
IF @@Rowcount = 0
BEGIN
SET @ErrorMessage = 'No accounts found.'
SET @Result = 0
RETURN @Result
END
ELSE
BEGIN
SET @Result = 1
SELECT *
FROM @tmp_Accounts
END
इस temp तालिका में डालने के तरीके पर ध्यान दें।
इसका निचला पक्ष यह है कि लिखने में थोड़ा समय लग सकता है, क्योंकि आपको अपनी तालिका चर परिभाषित करना है।
मैं रेडगेट द्वारा क्वेरी विश्लेषक के लिए एसक्यूएल प्रॉम्प्ट की भी सिफारिश करता हूं।
आप OPENQUERY की जरूरत नहीं है करते हैं। बस का चयन सूची और किसी भी प्रश्न का से के बीच "में #AnyTableName" डाल ...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
या तालिका 1 से # टेम्पप 1 में चुनें * 0 = 1 – GernBlandston
यदि आप इस विधि – Matthieu
का उपयोग करते हैं तो अपनी प्रक्रिया के अंत में 'ड्रॉप तालिका # Temp1' करना न भूलें, हालांकि, तालिका चर को संकलित करने के लिए परिभाषित किया जाना चाहिए रन टाइम सही से? इसके लिए मुझे गतिशील रूप से जेनरेट की गई तालिका की आवश्यकता थी। – Jeff
टेबल वैरिएबल को स्पोक में परिभाषित किया गया है, जिसे मैं नीचे पोस्ट करूंगा ... – ElHaix
उह, लेकिन यह इतना वर्बोज़ है, खासकर जब से टीएसक्यूएल में "सम्मिलित या अद्यतन" कथन नहीं है ... –