你可以尝试以下解决方案:
DECLARE @StartDate DATE = '2017-02-22';
DECLARE @EndDate DATE = '2017-02-24';
DECLARE @SqlStatement NVARCHAR(MAX) = N'';
WITH Num10(Number)
AS (
SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
),
Num100(Number)
AS (
SELECT (a.Number - 1)*10 + b.Number FROM Num10 a CROSS JOIN Num10 b
)
SELECT @SqlStatement = @SqlStatement
+ N'CREATE TABLE ' + N'dbo.CocoJamboTable' + N'_' + REPLACE(CONVERT(VARCHAR(25), DATEADD(DAY, n.Number - 1, '2017-02-22'), 106), ' ', '') + N'(INT ID)'
+ CHAR(13) + CHAR(10)
FROM Num100 n
WHERE n.Number <= DATEDIFF(DAY, @StartDate, @EndDate) + 1;
PRINT @SqlStatement
--EXEC sp_executesql @SqlStatement
这将生成并执行(--UNCOMMENT LAST LINE
)以下脚本:
CREATE TABLE dbo.CocoJamboStupidNameTable_22Feb2017(ID INT)
CREATE TABLE dbo.CocoJamboStupidNameTable_23Feb2017(ID INT)
CREATE TABLE dbo.CocoJamboStupidNameTable_24Feb2017(ID INT)
编辑1:
[1] N10和N100的CTE返回这些热膨胀系数可以与数字的表来代替图1和10或11和100之间 的所有数字。这种表格的一个例子可以在here找到。
[2]主SELECT语句返回N100 CTE或数字表中的数字(从1开始)。
[3] DATEDIFF(DAY, @StartDate, @EndDate) + 1
计算@StartDate和@EndDate之间的天数,包括(+1)最后一个(@EndDate)。例如,在2017-02-22和2017-02-24之间的天数不是2(24-22),而是2 + 1 = 3(如果我们考虑22但也是24)。
[4] WHERE n.Number <= DATEDIFF(DAY, @StartDate, @EndDate) + 1;
筛选1和天数之间的所有数字(=开始日期和结束日期之间的差异)。
[5] SELECT DATEADD(DAY, n.Number - 1, '2017-02-22')
计算起始日期和结束也日之间的所有日期:2017年2月22日,23日,24
[6] SELECT N'CREATE TABLE .... DATEADD(DAY, n.Number, ...
将生成SQL CREATE TABLE
脚本开始日期之间的每个日期和结束日期。
int id应该是id int? –
你纠正它应该是ID INT,纠正我在几个地方 –
@ P.Salmon:更新。谢谢。 –