私はちょうど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としてキャストしようとしましたが、DBMSはその最後の行(ADD行)にIncorrect syntax near '@curr_date'
があることを知らせてくれることを嬉しく思っています。ローカル変数(私は思う)。私はサンプル出力を持っていませんが、出力はCHARとして定義された最初の列を持つテーブルで、名前を保持するのでemp_name
というタイトルにする必要があります。他のすべての列はタイプDOUBLE
として定義されており、数時間を保持するため、@curr_date
ヘッダーとして現在の日付を保持する必要があるため、NULL
にする必要があります。私はALTER
メソッドを通じてテーブルに追加されたすべてのカラムは、とにかくNULL
にデフォルト設定されていると思います。私はselect文を保持する変数を宣言する動的SQLの例を見てきましたが、実際にテーブルに列を追加する方法を理解していません。私はこれがCREATE
ステートメントで実行できるかどうかはわかりませんが、それがあればそれを見るのはすばらしいことです。また、これは私が@end_date
に、彼らは年間2046
セキュリティがここ
これは通常、あなたがスキーマのユーザーとして行うだろうものではありませんあなたは、一般的に、固定テーブル定義(ない動的なものを好むあなたの特定の質問に答えるために日付範囲に基づいてさまざまな数の列があります)。しかし、SQL文( 'declare @sql varchar(2000)')を作成し、それをalter文で作成し、 'EXEC'または' sp_executesql'を使って実行することができます – Igor
"header"はどういう意味ですか?それは列名ですか?列名として日付を使用したくない場合。それは非常に貧しいデザインの兆候であることと一緒に働くことは痛いだけではありません。また、今日と2046の間の毎日の列を持つ列の数を考慮してください。列の最大数を数桁大きく超えます。 –
より良いデザインをする方法を示すことができるように、ユースケースを教えてください。 – Hogan