Сообщение 102, уровень 15

#sql-server #tsql #stored-procedures

#sql-сервер #tsql #хранимые процедуры

Вопрос:

 create procedure sp_AD_CAREOF_COL
(
    @tablename as varchar(200), 
    @column as varchar(200), 
    @column2 as varchar(200)
)

As
    if col_length(@tablename, @column) is null
    begin
        alter table auto
        add careof varchar(200)
        print ('the care of column is added')
    end
    else if COL_LENGTH(@tablename,@column2) is null
    begin
        alter table auto
        add ACCTG_CAREof varchar(200)
        print 'the ACCTG_CAREOF column are added'
    end
    else
    begin
        print'BOTH COLUMN ARE PRESENT'
    end

exec sp_AD_CAREOF_COL ('auto','careof','acctg_careof');
  

При использовании этого кода я получил сообщение об ошибке 102, кто-нибудь, помогите мне решить это.

Комментарии:

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

2. Пожалуйста, не используйте sp_ префикс : «Избегайте использования префикса sp_ при именовании процедур. Этот префикс используется SQL Server для обозначения системных процедур. Использование префикса может привести к сбою кода приложения, если существует системная процедура с таким же именем.». Этот совет существует десятилетия .

3. Остановитесь и подумайте о своем коде. Почему у него есть параметры, которые представляют имена таблиц и столбцов? И почему ваш код игнорирует эти параметры с помощью инструкций alter, где имена таблиц и столбцов жестко запрограммированы? «Печать» — это обычно не тот способ, которым процедура должна взаимодействовать с приложением. Начните сначала.

Ответ №1:

Ваша EXEC команда неверна, вместо этого используйте следующее (удалите ( и ) ):

 EXEC sp_AD_CAREOF_COL 'auto', 'careof', 'acctg_careof';
  

Вы также можете использовать следующее:

 EXEC sp_AD_CAREOF_COL @tablename = 'auto', @column = 'careof', @column2 = 'acctg_careof'