बस एक प्रहार, लेकिन यहाँ FizzBuzz लिखने का एक और तरीका है :) 100 पंक्तियाँ WITH कथन को दिखाने के लिए पर्याप्त हैं, मुझे लगता है।
;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
लेकिन WITH के पीछे की वास्तविक शक्ति (कॉमन टेबल एक्सप्रेशन के रूप में जानी जाती है http://msdn.microsoft.com/en-us/library/ms190766.aspx SQL सर्वर 2005 और इसके बाद के संस्करण में "CTE") रिकर्सन है, जहां तालिका हर बार वर्चुअल-टेबल में जोड़कर पुनरावृत्तियों के माध्यम से बनाई गई है।
;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
सभी डेटाबेस में समान क्वेरी चलाने के लिए, आप अनिर्दिष्ट sp_msforeachdb का उपयोग कर सकते हैं . एक अन्य उत्तर में इसका उल्लेख किया गया है, लेकिन यह sp_msforeachdb है, न कि sp_foreachdb।
हालांकि इसका उपयोग करते समय सावधान रहें, क्योंकि कुछ चीजें आपकी अपेक्षा के अनुरूप नहीं होती हैं। इस उदाहरण पर विचार करें
exec sp_msforeachdb 'select count(*) from sys.objects'
प्रत्येक डीबी के भीतर वस्तुओं की गिनती के बजाय, आपको वही गिनती रिपोर्ट मिल जाएगी, वर्तमान डीबी की शुरुआत करें। इसके आसपास जाने के लिए, पहले डेटाबेस का हमेशा "उपयोग" करें। बहु-शब्द डेटाबेस नामों को योग्य बनाने के लिए वर्गाकार कोष्ठकों पर ध्यान दें।
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
टैली टेबल को पॉप्युलेट करने के बारे में आपकी विशिष्ट क्वेरी के लिए, आप नीचे दिए गए जैसा कुछ उपयोग कर सकते हैं। DATE कॉलम के बारे में निश्चित नहीं है, इसलिए इस टैली टेबल में केवल DBNAME और IMG_COUNT कॉलम हैं, लेकिन आशा है कि यह आपकी मदद करेगा।
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