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

Sử dụng mệnh đề với SQL Server 2008

Chỉ là một câu chọc ngoáy, nhưng đây là một cách khác để viết FizzBuzz:) 100 hàng là đủ để hiển thị câu lệnh WITH, tôi nghĩ.

;WITH t100 AS (
 SELECT n=number
 FROM master..spt_values
 WHERE type='P' and number between 1 and 100
)                
 SELECT
    ISNULL(NULLIF(
    CASE WHEN n % 3 = 0 THEN 'Fizz' Else '' END +
    CASE WHEN n % 5 = 0 THEN 'Buzz' Else '' END, ''), RIGHT(n,3))
 FROM t100

Nhưng sức mạnh thực sự đằng sau WITH (được gọi là Biểu thức bảng chung http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") trong SQL Server 2005 trở lên là Đệ quy, như bên dưới nơi bảng được tạo thông qua các lần lặp thêm vào bảng ảo mỗi lần.

;WITH t100 AS (
 SELECT n=1
 union all
 SELECT n+1
 FROM t100
 WHERE n < 100
)                
 SELECT
    ISNULL(NULLIF(
    CASE WHEN n % 3 = 0 THEN 'Fizz' Else '' END +
    CASE WHEN n % 5 = 0 THEN 'Buzz' Else '' END, ''), RIGHT(n,3))
 FROM t100

Để chạy một truy vấn tương tự trong tất cả cơ sở dữ liệu, bạn có thể sử dụng sp_msforeachdb không có tài liệu . Nó đã được đề cập trong một câu trả lời khác, nhưng nó là sp_msforeachdb, không phải sp_foreachdb.

Hãy cẩn thận khi sử dụng nó, vì một số thứ không như bạn mong đợi. Hãy xem xét ví dụ này

exec sp_msforeachdb 'select count(*) from sys.objects'

Thay vì số lượng các đối tượng trong mỗi DB, bạn sẽ nhận được số lượng CÙNG được báo cáo, bắt đầu bằng số lượng của DB hiện tại. Để giải quyết vấn đề này, hãy luôn "sử dụng" cơ sở dữ liệu trước. Lưu ý dấu ngoặc vuông để đủ điều kiện cho các tên cơ sở dữ liệu nhiều từ.

exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'

Đối với truy vấn cụ thể của bạn về cách điền bảng kiểm đếm, bạn có thể sử dụng một cái gì đó như bên dưới. Không chắc chắn về cột DATE, vì vậy bảng kiểm đếm này chỉ có các cột DBNAME và IMG_COUNT, nhưng hy vọng nó sẽ giúp ích cho bạn.

create table #tbl (dbname sysname, img_count int);

exec sp_msforeachdb '
use [?];
if object_id(''tbldoc'') is not null
insert #tbl
select ''?'', count(*) from tbldoc'

select * from #tbl


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị rỗng trong kiểu dữ liệu varbinary tham số

  2. Mã hóa sao lưu cơ sở dữ liệu SQL Server

  3. Các cột tổng hợp động trong SQL Server

  4. xem các giá trị đã thay đổi sau một tuyên bố cập nhật

  5. Chức năng như USE để trỏ đến cơ sở dữ liệu SQL trên một máy chủ khác?