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