Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL động với vòng lặp trên tất cả các cột trong một bảng

Đây là một ví dụ làm việc thông qua tất cả các đề xuất trong nhận xét.

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 mẫu (lưu ý điều này chỉ hiển thị lần lặp đầu tiên thông qua con trỏ. Không chắc đây là hạn chế của SQLFiddle hay lỗi).

Tôi có thể sẽ lưu trữ các kết quả vào một cơ sở dữ liệu riêng biệt nếu tôi đang làm điều này. Ngoài ra, tôi có thể sẽ đặt các bit xây dựng SQL vào các hàm do người dùng xác định để có thể bảo trì (bit chậm sẽ chạy các truy vấn, không có điểm nào tối ưu hóa việc tạo ra chúng).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia chéo 'n' lần một bảng

  2. SQL Server kiểm tra phân biệt chữ hoa chữ thường?

  3. Cách sử dụng use if..else trong Data Flow dựa trên các giá trị biến người dùng trong SSIS

  4. Cách khắc phục “tên hồ sơ không hợp lệ” khi cập nhật hồ sơ thư cơ sở dữ liệu trong SQL Server (T-SQL)

  5. sp_send_dbmail được thực thi từ công việc không thành công với kết quả truy vấn được đính kèm dưới dạng tệp