sql server Многокомпонентный идентификатор не может быть привязан к хранимой процедуре

Я создаю хранимую процедуру, в которой вызываю две функции.

Я получаю сообщение об ошибке:

Сообщение 4104, уровень 16, состояние 1, процедура Add_Translation, строка 25
Не удалось связать составной идентификатор ".word".

Это моя хранимая процедура:

ALTER PROCEDURE [dbo].[Add_Translation]
   @english nvarchar(70), 
   @kurdish nvarchar(70),
   @english_category int,
   @kurdish_category int,
   @result int out
AS
BEGIN
    SET NOCOUNT ON;

    if @english is not null and @kurdish is not null and @english_category is not null and @kurdish_category is not null
    begin
        declare @intEnId int=-1;
        exec @intEnId = Check_English_word @text = @english;

        declare @identityEnglish int;
        declare @identityKurdish int;

        if @intEnId = -1
        begin
            insert into english_table values(@english, @english_category);
            set @identityEnglish = SCOPE_IDENTITY();
        end
        else
        begin
            set @identityEnglish = (select e.english_id from english_table e where UPPER(.word)=UPPER(@english)); 
        end

        declare @intKuId int=-1;
        exec @intKuId=Check_Kurdish_Word @word=@kurdish;

        if @intKuId =-1
        begin
            insert into kurdish_table values(@kurdish, @kurdish_category);

            set @identityKurdish = SCOPE_IDENTITY();
        end
        else
        begin
            set @identityKurdish = (select k.kurdish_id from kurdish_table k where upper(k.word)=upper(@kurdish));
        end

        declare @translated int =0;

        exec @translated = Check_Translation @english_id = @identityEnglish, @kurdish_id = @identityKurdish;

            if @translated=0
        begin
            insert into transactions values(@identityEnglish, @identityKurdish);
            set @result = 1;
        end
        else
        begin
            set @result = 2;
        end
    end
    else
    begin
        set @result = 0;
    end
END

Вот первая функция:

ALTER FUNCTION [dbo].[Check_English_word] 
(
@text nvarchar(70) 
)
RETURNS int
AS
BEGIN

    DECLARE @Result int
    set @Result=-1;

    if @text is not null
    begin

        SELECT @Result = e.english_id 
            from english_table e 
            where UPPER(e.word) = UPPER(@text); 
    end

    RETURN @Result
END

Вторая функция:

ALTER FUNCTION [dbo].[Check_Kurdish_Word] 
(
@word nvarchar(70) 
)
RETURNS int
AS
BEGIN
    DECLARE @Result int
    set @Result=-1;

if @word is not null
    begin
        SELECT @Result = k.kurdish_id 
            from kurdish_table k  
            where UPPER(k.word) = UPPER(@word); 
    end

    RETURN @Result
END

person danarj    schedule 30.08.2012    source источник
comment
Должно быть @english_category, а не @englsih_category (просто опечатка)   -  person marc_s    schedule 30.08.2012


Ответы (1)


В этой строке отсутствует e

        set @identityEnglish=(select e.english_id from english_table e 
              where UPPER(.word)=UPPER(@english));  

Измените его на

        set @identityEnglish=(select e.english_id from english_table e 
              where UPPER(e.word)=UPPER(@english));  

Кроме того, рекомендуется указывать столбцы при выполнении вставки, т.е.

insert into english_table values(@english,@englsih_category); 

должно быть

insert into english_table (word, category) values(@english,@englsih_category); 
person podiluska    schedule 30.08.2012