Добавьте столбец и обновите его в той же хранимой процедуре в SQL Server 2008 - PullRequest
5 голосов
/ 09 июня 2010

если у меня есть хранимая процедура, скажем

CREATE PROCURE w AS

ALTER TABLE t ADD x char(1)

UPDATE t set x =1

Даже когда она позволяет мне создать эту хранимую процедуру (если я создаю ее, когда x существует), при ее выполнении в операторе UPDATE возникает ошибка, поскольку столбец x не существует.

Какой обычный способ справиться с этим, он должен появляться постоянно? Я могу обойти это, поместив ОБНОВЛЕНИЕ в EXEC, есть ли другой / лучший способ?

Спасибо

Ответы [ 4 ]

4 голосов
/ 09 июня 2010

ALTER TABLE в контексте 1-ой СДЕЛКИ и UPDATE в контексте 2-ой:

CREATE PROCEDURE w
AS
   BEGIN TRAN
      ALTER TABLE ..
   COMMIT

   BEGIN TRAN
      UPDATE ..
   COMMIT
END
2 голосов
/ 09 июня 2010

Вместо добавления столбца, подобного этому, и последующего обновления его значения, вы можете добавить столбец со значением по умолчанию

CREATE PROCEDURE w AS 

ALTER TABLE t ADD x char(1) NOT NULL CONSTRAINT abc DEFAULT 1
0 голосов
/ 12 ноября 2014

Проблема, с которой вы сталкиваетесь, заключается в том, что ваше обновление проверяется по существующей таблице, прежде чем оно выполнит создание для вашей процедуры.

Если вы привержены этому, все, что вам нужно сделать, это убедиться, что таблица не существует, когда вы создаете / изменяете процедуру, что приводит анализатор к отложенному пути разрешения имен из-за несуществующих объектов .

После создания процедуры вы можете создать свою таблицу.

Я предполагаю, что ваш процесс уже удаляет / создает таблицу, иначе вам действительно не понадобится такая процедура в любом случае.

0 голосов
/ 04 мая 2013

Я думаю, что вы должны добавить оператор GO сразу после Create.

Sql-сервер отправит запрос на создание, и тогда ваше обновление будет работать нормально.

...