尝试这个:
DECLARE @dtmin date
DECLARE @dtmax date
DECLARE @dynsql nvarchar(3000)
DECLARE @colname varchar(20)
SET @dynsql = N'CREATE TABLE trial('
SET @dtmin = {d '2013-07-15'}
SET @dtmax = {d '2013-07-18'}
DECLARE @currdate date
SET @currdate = @dtmin
WHILE (@currdate <= @dtmax)
BEGIN
SET @colname = DATENAME(month, @currdate) + CONVERT(varchar, DATEPART(day, @currdate))
SET @dynsql = @dynsql + @colname + ' varchar(10)'
IF (@currdate < @dtmax)
BEGIN
SET @dynsql = @dynsql + ', '
END
ELSE
BEGIN
SET @dynsql = @dynsql + ')'
END
SET @currdate = DATEADD(day, 1, @currdate)
END
EXEC sp_executesql @dynsql
PS:我不知道您要求的原因,但通常以这种方式创建表是不正确的,因为您要放入列的信息应该放在行中。
示例:如果我想逐日存储销售额,我命名为 SALES 的正确表是:SALES (id varchar(36), dt datetime, amount decimal(19,2)) 而不是 SALES (ID VARCHAR(36) , dt1 十进制 (19,2), dt2 十进制 (19,2)... 等等)
因为如果你想改变你的周期,你必须重写你的表,如果你想查询你的表,你必须为每种情况编写几个查询。这张桌子上的工作非常辛苦。
请重新考虑你的选择。
祝你今天过得愉快。