Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Dinamis dengan Loop Over Semua Kolom dalam Tabel

Berikut ini contoh mengerjakan semua saran di komentar.

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;

Contoh SQLFiddle (perhatikan ini hanya menunjukkan iterasi pertama melalui kursor. Tidak yakin apakah ini batasan SQLFiddle atau bug).

Saya mungkin akan menyimpan hasilnya ke dalam database terpisah jika saya melakukan ini. Juga, saya mungkin akan menempatkan bit bangunan SQL ke dalam fungsi yang ditentukan pengguna untuk pemeliharaan (bit lambat akan menjalankan kueri, tidak ada gunanya mengoptimalkan pembuatannya).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendeteksi jika string berisi karakter khusus?

  2. Cara memaksa database SQL Server 2008 menjadi Offline

  3. Mendapatkan Tanggal di antara rentang tanggal

  4. pohon induk anak sql dengan urutan pengurutan

  5. Total Kumulatif di server MS Sql