我需要根据我的参数创建一个包含列的表。参数是字符串变量,它由逗号分隔的多个值的月份和年份组合组成。根据这个值,我需要创建临时表。我尝试过如下
DECLARE @compareMonths VARCHAR(2000)
DECLARE @compareCount INT
DECLARE @cols VARCHAR(2000)
DECLARE @query AS NVARCHAR(MAX);
SET @compareMonths = '2014-01,2014-02'
select @cols = STUFF((SELECT distinct ',' +
CONVERT(CHAR(3), DATENAME(MONTH, CAST(
CAST(SUBSTRING(Data, 0, 5) AS VARCHAR(4)) +
RIGHT('0' + CAST(SUBSTRING(Data, 6, 2) AS VARCHAR(2)), 2) +
RIGHT('0' + CAST(1 AS VARCHAR(2)), 2)
AS DATETIME))) + ' ' + CAST(SUBSTRING(Data, 0, 5) AS VARCHAR(4))
FROM dbo.Split(@compareMonths, ',')
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
这里我将列名称作为月份名称和年份,但是如何基于此动态创建表格。我没有任何值列来使用pivot。
我的outout表必须有2列,分别为2014年1月,2014年2月
答案 0 :(得分:0)
如果你想要一个SQL数据库表,你可以build Dynamic SQL script形成一个CREATE TABLE脚本,如下所示
DECLARE @compareMonths VARCHAR(2000)
SET @compareMonths = '2014-01,2014-02'
declare @sql nvarchar(max)
SELECT @sql = isnull(@sql + ',','') + ( '[' + val + ']') + ' varchar(100)' from dbo.Split(@compareMonths, ',')
SET @sql = N'CREATE Table OutputTable (' + @sql + ')'
exec sp_executeSql @sql
select * from OutputTable
在上面的脚本中,我还使用了sql string split function,您可以在参考教程中找到源代码
最后,您将在数据库中有一个名为OutputTable的表,其中包含两列