2012-01-05 12 views
8

यह मेरा संग्रहीत प्रक्रिया में से एक का एक वर्ग है:SQL सर्वर में कोई तालिका चर खाली है या नहीं, यह जांचने के लिए कैसे करें?

(SELECT T FROM @dataInTable) IS NULL 

यह काम करता है:

@dataInTable dbo.Table_Variable readonly, 
.... 

AND (
    (@dataInTable IS NULL) 
    OR 
    (item IN (SELECT T FROM @dataInTable)) 
) 

@dataInTable IS NULL वाक्य रचना में गलत है, त्रुटि

Must declare the scalar variable "@dataInTable"

तो मैं में बदल दें लेकिन अगर @dataInTable में 1 से अधिक आइटम हैं, तो मुझे एक त्रुटि मिलती है:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

बोधगम्य तो मैं यह करने के लिए बदलने के लिए:

(SELECT TOP(1) T FROM @ProgramRatings) IS NULL 

निर्माण पूरी तरह से, मैं क्या है प्रदर्शन चिंता का विषय है।

मैं सोच रहा हूँ, अगर वहाँ है कि क्या एक तालिका चर रिक्त है की जांच करने के

AND (
    (@dataInTable IS EMPTY) 
    OR 
    (item IN (SELECT T FROM @dataInTable)) 
) 

उत्तर

5

जांच के लिए यदि तालिका चर खाली है, बस का उपयोग मौजूद है पहले से ही अन्य लोगों द्वारा उल्लेख किया है,

लेकिन

आप अज्ञात से खाली सेट अलग करता है, तो सेट करें - तो आपके पास कोई विकल्प नहीं है - आपको अतिरिक्त चर लागू करना होगा जो बताता है कि खाली सेट वास्तव में खाली या अज्ञात है।

declare @dataInTableIsUnknown BIT 

... 

AND (
    (@dataInTableIsUnknown = 1) 
    OR 
    (item IN (SELECT T FROM @dataInTable)) 
) 
21

तालिका चर की तरह एक आसान तरीका है अदिश चर तो @dataInTable IS NULL अनुमति नहीं है के रूप में आप का उल्लेख से अलग हैं। मैं निम्नलिखित सुझाव है:

EXISTS (SELECT 1 FROM @dataInTable) 

निम्नलिखित भी अपनी स्थिति के लिए कोई मतलब हो सकता है यदि आप वास्तव में गिनती पता करने के लिए परवाह:

DECLARE @dataCount int = (SELECT COUNT(1) FROM @dataInTable) 
IF @dataCount = 0 -- Empty 
11

हमेशा है exists

उदाहरण के लिए:

select 'Yep' 
where exists (select 1 from @dataInTable) 
+4

+1 'EXISTS'' COUNT' से अधिक कुशल हो सकता है क्योंकि यह पहली पंक्ति के बाद बंद हो जाता है। –

+0

धन्यवाद, मैंने अस्तित्व की कोशिश की लेकिन इसे किसी चयनित स्थिति के अंदर उपयोग नहीं किया जा सकता है: और ( (मैं यहां मौजूद नहीं हो सकता) या (आइटम में (@ डेटाटाटेबल से चुनें T)) )। क्या आप सही वाक्यविन्यास –

+1

@EricYin जानते हैं यदि आप इसे 'SELECT' में उपयोग करना चाहते हैं तो शायद आप' केस 'की तलाश में हैं। यह जानने में मुश्किल है कि आप अब तक पोस्ट किए गए टुकड़ों के आधार पर क्या कर रहे हैं। –

संबंधित मुद्दे

 संबंधित मुद्दे