Динамическое обновление строковых значений в таблицах с использованием хранимой процедуры

#sql #sql-server

#sql #sql-сервер

Вопрос:

Ниже приведена моя хранимая процедура для обновления столбца в SQL SERVER

 ALTER PROCEDURE [dbo].[AspPageUpdate] 
     (@type varchar(50),@comp varchar(50),
      @place varchar(50))
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @tid varchar;
    DECLARE @ph int;    
    SET @ph = CAST(@place AS int);

    select  @tid = Type_Id 
    from TypeTable 
    where Type_Name = @type 

    UPDATE TypeSetupTable 
    SET PLACE_HOLDERS = @ph 
    WHERE complexity = @comp 
          AND Type_Id = @tid 
END
  

Но таблица не обновляется. Я думаю, что проблема в кавычках (строки должны быть в кавычках, верно?).
Если я даю статические значения, это выполняется, например:

 UPDATE TypeSetupTable SET PLACE_HOLDERS = @ph WHERE complexity = 'Simple' AND Type_Id = 'SSRS' 
  

Пожалуйста, подскажите мне решение.

Заранее спасибо.

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

1. Вы преобразуете строку в целое число? Вы получили какую-либо ошибку?

2. Обновление? Где вы узнали это слово?

3. Вы определили @tid как односимвольную varchar переменную. Только первый символ, который вы загружаете из TypeTable , будет сохранен и использован в UPDATE инструкции

4. Спасибо. После присвоения размера @tid. это работает нормально.. Большое спасибо..

Ответ №1:

вы не установили размер переменной @tid .

Уверены ли вы в содержимом этой переменной при выполнении хранимой процедуры? Попробуйте поставить raiserror(@tid,15,1) и проверить содержимое этой переменной. Есть блоги о привычке не изменять размер переменных varchar.

Также официально задокументировано, что размер переменных без изменения размера равен 1.