изменение типа данных на бит после столбца alter - PullRequest
0 голосов
/ 13 июня 2018

Я кодирую этот запрос, но, к сожалению, я получил эту ошибку:

"Бит типа данных аргумента недопустим для аргумента 1 функции подстроки."

MyХранимая процедура:

ALTER TABLE A ALTER COLUMN B nvarchar(20);  
UPDATE A SET B = CASE WHEN SUBSTRING(B, 1, 2)>1000 
        THEN '1' + B ELSE B END

Я конвертирую свои данные, но снова получаю ошибку.

Абсолютно мой запрос на обновление работает, если нет первого (Alter Table Alter Column).

Может кто-нибудь объяснить, почему это произошло и как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018
ALTER table Table_1 
ALTER COLUMN Id NVARCHAR(20)

// Затем продолжаем ...

0 голосов
/ 13 июня 2018

Этот код работает:

create table a (b bit);

alter table a alter column b nvarchar(20);
go

update a
    set b = substring(b, 1, 2);

Этот код не:

create procedure p as
begin
    alter table a alter column b nvarchar(20);

    update a
        set b = substring(b, 1, 2);
end;

Почему бы и нет?Первый код фактически изменяет таблицу, поэтому update является правильным при запуске.Внутри хранимой процедуры два оператора скомпилированы, но не запущены.Это означает, что update скомпилирован, но таблица не изменилась.Следовательно, вы получаете сообщение об ошибке.

Хотя вы можете решить эту проблему с помощью динамического SQL, я бы вместо этого спросил, почему вы изменяете типы столбцов в хранимой процедуре.Это кажется довольно нерегулярным.Обычно хранимые процедуры не выполняют таких изменений.

...