如何在循环中使用变量 create/add 列

How to create/add columns using a variable in a loop

我对 SQL 很陌生,因为我刚刚读完 Sams Teach Yourself SQL in 10 Minutes,这是我唯一的 SQL 知识。所以现在我已经完成了这本书,我正在尝试创建一些 table 以便我可以使用它们。我可以轻松地创建一个具有已知数量的列并指定 header 的 table。我遇到麻烦的地方是创建一个 table,其中包含未知数量的列和日期作为 header。到目前为止我尝试过的是:

DECLARE @start_date AS DATE
DECLARE @end_date AS DATE
DECLARE @curr_date AS DATE
DECLARE @column_name AS CHAR(10)

SET @start_date = 2016-01-02
SET @end_date = 2016-12-31
SET @curr_date = @start_date

WHILE @curr_date < @end_date
    SET @curr_date = DATEADD(DD, 7, @curr_date)
    ALTER TABLE Project_1
        ADD @curr_date  DOUBLE

我在这里尝试做的是为循环设置起点和终点,并使用存储在局部变量中的循环条件作为我的列 header 因为这就是我需要的列标题。我还尝试使用 CAST 将其转换为 char 但 DBMS 很高兴地告诉我最后一行(ADD 行)有 Incorrect syntax near '@curr_date' 因为它不喜欢我'我试图用局部变量命名列(我认为)。我没有示例输出,但输出应该是 table,第一列定义为 CHAR,标题为 emp_name,因为它将包含名称。所有其他列定义为 DOUBLE 类型并且应该是 NULL,因为它们将保存几个小时并且必须将当前日期设为 header @curr_date。我认为通过 ALTER 方法添加到 table 的所有列都默认为 NULL。我看过动态 SQL 的示例,您可以在其中声明一个变量来保存 select 语句,但我真的不明白它们如何向 table 添加列。我不确定这是否可以在 CREATE 语句中完成,但如果可以的话,那就太好了。此外,这需要可变,因为我可以将 @end_date 更改为……他们是 2046 年。

这里安全不是问题

我同意所有关于使用 ROW 而不是动态添加列的评论,您始终可以动态地旋转那些后者,并且它会更灵活。因此,也许有一些架构注意事项,但只是为了回答您的具体问题,您在哪里关闭.....

DECLARE @start_date AS DATE
DECLARE @end_date AS DATE
DECLARE @curr_date AS DATE
DECLARE @column_name AS CHAR(10)

SET @start_date = '2016-01-02'
SET @end_date = '2016-12-31'
SET @curr_date = @start_date

WHILE @curr_date < @end_date
BEGIN
    DECLARE @SQL NVARCHAR(MAX)

    SET @curr_date = DATEADD(DD, 7, @curr_date)

    SET @SQL = 'ALTER TABLE TableB
        ADD [' + CAST(@curr_date AS VARCHAR(10)) + ']  FLOAT'

    --PRINT @SQL
    EXECUTE (@SQL)
END