それは拘束力のある問題です。コードはコンパイル時にテーブルのメタデータにバインドされ、遅延バインドされません。この制限を克服するには、EXECと動的SQLを使用してみてください。
BEGIN TRANSACTION;
PRINT 'Adding column, ''SupplementalDividends'', to MyTable table.';
ALTER TABLE MyTable
ADD SupplementalDividends DECIMAL(18,6);
PRINT 'Column added successfully....';
PRINT 'Ready to INSERT into MyTable ...';
EXEC('
INSERT INTO MyTable (x, SupplementalDividends)
VALUES (1, 3.2);
')
PRINT '**** CHANGES COMPLETE -- COMMITTING.';
COMMIT TRANSACTION;
別のオプションは、ストアドプロシージャを使用してデータを挿入することです。レイトバインディングはストアドプロシージャに適用されますが、アドホッククエリには適用されません。繰り返しますが、動的SQLを使用してプロシージャを作成する必要がありますが、パラメーターを渡すのが簡単になる場合があります。
BEGIN TRANSACTION;
PRINT 'Adding column, ''SupplementalDividends'', to MyTable table.';
ALTER TABLE MyTable
ADD SupplementalDividends DECIMAL(18,6);
PRINT 'Column added successfully....';
PRINT 'Ready to INSERT into MyTable ...';
EXEC('
CREATE PROCEDURE insData @p1 int, @p2 DECIMAL(18,6)
AS
BEGIN
INSERT INTO MyTable (x, SupplementalDividends)
VALUES (@p1, @p2);
END')
EXEC InsData 1, 3.2;
PRINT '**** CHANGES COMPLETE -- COMMITTING.';
COMMIT TRANSACTION;
一時的なストアドプロシージャも機能します。
BEGIN TRANSACTION;
PRINT 'Adding column, ''SupplementalDividends'', to MyTable table.';
ALTER TABLE MyTable
ADD SupplementalDividends DECIMAL(18,6);
PRINT 'Column added successfully....';
PRINT 'Ready to INSERT into MyTable ...';
EXEC('
CREATE PROCEDURE #insData @p1 int, @p2 DECIMAL(18,6)
AS
BEGIN
INSERT INTO MyTable (x, SupplementalDividends)
VALUES (@p1, @p2);
END')
EXEC #InsData 1, 3.2;
PRINT '**** CHANGES COMPLETE -- COMMITTING.';
COMMIT TRANSACTION;
schema.ObjectName
。良い実践に適応するための良いスタート:-)