Я новичок в SQL и только что закончил читать Sams Teach Yourself SQL in 10 Minutes и это мое единственное знание SQL. Итак, теперь, когда я закончил с книгой, я пытаюсь создать несколько таблиц, чтобы поиграть с ними. Я могу легко создать таблицу с известным количеством столбцов и указанным заголовком. У меня возникают проблемы с созданием таблицы с неизвестным количеством столбцов и датой в качестве заголовка. То, что я пробовал до сих пор, это:
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
Здесь я пытался сделать начальную и конечную точки для цикла и использовать условие цикла, которое хранится в локальной переменной, в качестве заголовка моего столбца, поскольку это то, что мне нужно для заголовка столбца. Я также пытался использовать CAST
, чтобы преобразовать его в char, но СУБД рада сообщить мне, что в этой последней строке (строке ADD) есть Incorrect syntax near '@curr_date'
, потому что ей не нравится, что я пытаюсь назвать столбец с помощью локальная переменная (я думаю). У меня нет образца вывода, но вывод должен быть таблицей с первым столбцом, определенным как CHAR и названным emp_name
, потому что он будет содержать имена. Все остальные столбцы определены как тип DOUBLE
и должны быть NULL
, потому что они будут содержать определенное количество часов и должны иметь текущую дату в качестве заголовка @curr_date
. Я думаю, что все столбцы, добавленные в таблицу с помощью метода ALTER
, в любом случае по умолчанию имеют значение NULL
. Я видел примеры динамического SQL, где вы объявляете переменную для хранения оператора select, но я действительно не понимаю, как они добавляют столбцы в таблицу. Я не уверен, что это можно сделать в операторе CREATE
, но если это возможно, было бы здорово увидеть. Кроме того, это должно быть переменным в том факте, что я могу изменить @end_date
, скажем, на... 2046 год.
Безопасность здесь не при чем
declare @sql varchar(2000)
), заполнить ее оператором alter, а затем запустить ее, используяEXEC
илиsp_executesql
. - person Igor   schedule 06.07.2016