Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

रिकर्सिव स्ट्रिंग कॉन्सटेनेशन के अंदर सबक्वायरी हमेशा न्यूल क्यों लौटाती है?

यह एक ट्रेवॉकर को लागू करने का प्रयास करने का एक बहुत ही अजीब तरीका है, चयन में @id बढ़ाना और इसे सबक्वायरी पर लागू करने की अपेक्षा करना। यह काम नहीं करता है क्योंकि SQL सर्वर क्वेरी सेटअप चरण में एक स्थिर अधिकार के रूप में सबक्वेरी एक्सप्रेशन के लिए @id के मान को लॉक कर देता है।

इस उदाहरण को देखें, जहां लौटाया गया @ मान स्पष्ट रूप से इंगित करता है कि @id 1 पर बंद है। आपके प्रश्न के साथ, इसे 0 पर बंद कर दिया गया था, इसलिए प्रत्येक सबक्वायरी न्यूल वापस आ जाएगी, जाहिरा तौर पर क्योंकि @id =0 के लिए कोई मिलान नहीं है।

create table table1 (
  id int);
create table table2 (
  id int, value varchar(10));
insert table1 values (1),(2),(3),(4);
insert table2 values
(1,1),
(2,2),
(3,3),
(4,4);

DECLARE @id INT, @value VARCHAR(10);

SELECT @id=1, @value='';

SELECT
    @value = @value + (SELECT TOP 1 value FROM TABLE2 WHERE [email protected]) + '-',
    @id = @id+1
FROM TABLE1;

select @value, @id

-- result
1-1-1-1       5

यदि आप केवल 2 से मान चाहते हैं, तो वेरिएबल @id के बजाय, आप सबक्वायरी को तालिका आईडी से नीचे के रूप में सहसंबंधित करते हैं:

create table table1 (id int);
create table table2 (id int, value varchar(10));
insert table1 values (1),(2),(3),(4);
insert table2 values
(1,1),
(3,9),
(4,4);

DECLARE @value VARCHAR(10);

SELECT @value='';

SELECT
    @value = @value + isnull((SELECT TOP 1 value 
                              FROM TABLE2 
                              WHERE id=table1.id) + '-','')
FROM TABLE1;

select @value

-- Result
1-9-4


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर xp_delete_file पैरामीटर

  2. DatedIFF () SQL सर्वर में गलत परिणाम देता है? इसे पढ़ें।

  3. एकल उपयोगकर्ता मोड में sql सर्वर प्रारंभ नहीं कर सकता

  4. GROUP BY और ROW_NUMBER को कैसे संयोजित करें?

  5. मैं टी-एसक्यूएल में एक टेबल को स्कीमा में कैसे स्थानांतरित करूं