невозможно обновить столбец целочисленного типа с параметром в хранимой процедуре - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь обновить столбец типа integer в моей таблице И это сообщение об ошибке, которое я получаю: «к типу данных int» Может ли кто-нибудь помочь мне?

это код процедуры:

@table nvarchar(20),
@nameColumnID nvarchar(15),
@id nvarchar(9),
@homeNumber int

ОБЪЯВИТЬ @sql int

IF(@homeNumber != 0)
        SET @sql = 'UPDATE ' + @table + ' SET homeNumber =  ' + @homeNumber + ' WHERE ' + @nameColumnID + ' = ' + @id   

     EXECUTE sp_executesql @sql

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Используйте параметры для значений, где вы можете (т.е. не идентификаторы):

DECLARE @table nvarchar (20);DECLARE @nameColumnID nvarchar (15);ОБЪЯВИТЬ @id nvarchar (9);ОБЪЯВИТЬ @homeNumber int;DECLARE @sql nvarchar (max);

IF (@homeNumber <> 0)
BEGIN
    SET @sql = 'UPDATE ' + @table + ' SET homeNumber =  @homeNumber WHERE ' + @nameColumnID + ' = @id';

    EXEC sp_executesql @sql,
                       N'@homeNumber int, @id nvarchar(9)',
                       @homeNumber=@homeNumber, @id=@id;
END;

Вы также объявили @sql целым числом.Вероятно, просто недосмотр.Однако, если homeNumber предназначен для использования в качестве номера телефона, вам следует использовать строку.Номера телефонов могут начинаться с нуля.

0 голосов
/ 15 октября 2018

Вы должны преобразовать int id в строку
Это рабочий код для таблицы на моем компьютере.

@table nvarchar(20),
@nameColumnID nvarchar(15),
@id nvarchar(9),
@homeNumber int

DECLARE @sql nvarchar(400)

IF(@homeNumber != 0)

        SET @sql = 'UPDATE ' + @table + ' SET homeNumber =  ' + CONVERT(varchar(10), @homeNumber) + ' WHERE ' + @nameColumnID + ' = ' + @id   

     EXECUTE (@sql)
0 голосов
/ 15 октября 2018

Используйте «EXECUTE (@sql)» только вместо «EXECUTE sp_executesql @sql»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...