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

एक तालिका में सभी स्तंभों पर गतिशील SQL w/लूप

टिप्पणियों में सभी सुझावों के माध्यम से काम करने वाला एक उदाहरण यहां दिया गया है।

declare @sql nvarchar(max);
declare stat_cursor cursor local fast_forward for
select
    case when x.name not in ('date', 'datetime2', 'smalldatetime', 'datetime') then

N'select
    ' + quotename(s.name, '''') + ' as schema_name,
    ' + quotename(t.name, '''') + ' as table_name,
    ' + quotename(c.name) + ' as column_name,
    count(*) qty
from
    ' + quotename(s.name) + '.' + quotename(t.name) + '
group by 
    ' + quotename(c.name) + '
order by 
    qty desc;'

    else

N'select
    ' + quotename(s.name, '''') + ' as schema_name,
    ' + quotename(t.name, '''') + ' as table_name,
    year(' + quotename(c.name) + ') as column_name,
    count(*) qty
from
    ' + quotename(s.name) + '.' + quotename(t.name) + '
group by 
    year(' + quotename(c.name) + ')
order by 
    qty desc;'

    end

from
    sys.schemas s
        inner join
    sys.tables t
        on s.schema_id = t.schema_id
        inner join
    sys.columns c
        on c.object_id = t.object_id
        inner join
    sys.types x
        on c.system_type_id = x.user_type_id
where
    x.name not in (
        'geometry',
        'geography',
        'hierarchyid',
        'xml',
        'timestamp',
        'bit',
        'image',
        'text',
        'ntext'
    );

open stat_cursor;

fetch next from stat_cursor into @sql;

while @@fetch_status = 0
begin
    exec sp_executesql @sql;
    fetch next from stat_cursor into @sql;
end;

close stat_cursor;
deallocate stat_cursor;

उदाहरण SQLFiddle (ध्यान दें कि यह केवल कर्सर के माध्यम से पहला पुनरावृत्ति दिखाता है। सुनिश्चित नहीं है कि यह SQLFiddle या बग की सीमा है)।

अगर मैं ऐसा कर रहा था तो शायद मैं परिणामों को एक अलग डेटाबेस में छिपा दूंगा। साथ ही, मैं शायद एसक्यूएल बिल्डिंग बिट्स को रखरखाव के लिए उपयोगकर्ता परिभाषित कार्यों में डाल दूंगा (धीमी गति से प्रश्न चल रहे होंगे, उन्हें उत्पन्न करने का कोई मतलब नहीं)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाटाइम वेरिएबल का समय भाग सेट करें

  2. तालिका/डेटाबेस के वर्ण सेट का निर्धारण?

  3. SQL त्रुटि:कीवर्ड 'उपयोगकर्ता' के पास गलत सिंटैक्स

  4. रिकर्सन को निश्चित स्तर तक सीमित करना - डुप्लिकेट पंक्तियां

  5. विथ (नोलॉक) बनाम सेट ट्रांजेक्शन आइसोलेशन लेवल बिना पढ़े पढ़ा