2016-05-04 1 views
1

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

CREATE PROC InsertTINH 
    @MaTinh char(4), 
    @TenTinh varchar(50), 
    @MaNuoc char(2) 
as 
begin 
    if exists (select * from TINH where MaTinh = @MaTinh) 
    begin 
     print 'Ma Tinh already exists' 
     return 
    end 
    else 
    begin 
     if not exists (select * from NUOC where MaNuoc = @MaNuoc) 
     begin 
      print 'Ma nuoc does not exist' 
      return 
     end 
     else 
     begin 
      insert into TINH 
      values ('@MaTinh', '@TenTinh') 

      insert into SQL_HOME.QLXNK.dbo.TINH 
      values ('@MaTinh', '@MaNuoc') 

      print 'Inserted successfully ' + @TenTinh 
     end 
    end 
end 
GO 

У меня есть 2 таблицы в 2-х различных хост, который Тинь в местной и второй SQL_HOME.QLXNK.dbo.TINH

  • Таблица1 (MaTinh символ (4) первичный ключ не нулевой, TenTinh VARCHAR (50))
  • Table2 (MaTinh символ (4) первичный ключ не нулевой, MaNuoc символ (2))

Когда я исполняю

exec InsertTINH 'VN01','Ho Chi Minh','VN' 

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

String or binary would be truncated

но просто вставить нормально -> это работает!

insert into TINH 
values ('VN01', 'Ho Chi Minh') 

insert into SQL_HOME.QLXNK.dbo.TINH 
values ('VN01','VN') 

В чем проблема с моей хранимой процедурой?

ответ

3

Вы должны удалить ' вокруг переменных/параметров:

insert into TINH values (@MaTinh,@TenTinh) 
insert into SQL_HOME.QLXNK.dbo.TINH values (@MaTinh,@MaNuoc) 

@MaTinh - переменная, '@MaTinh' - строка

DECLARE @MaTinh char(4) = 'VN01'; 
SELECT @MaTinh, '@MaTinh'; 

LiveDemo


Это хорошая практика, чтобы указать имена столбцов в списке INSERT:

INSERT INTO TINH(col_name1, col_name2) VALUES (@MaTinh,@TenTinh); 
+1

О БОГ !! СПАСИБО, ТАК ТАК ТАК! Я занимаю 2 часа, чтобы понять это, но все равно не получаю ничего. –

+0

@ H.Dinh Вы можете [принять мой ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235), если ваш вопрос был решен:) – lad2025

+0

Я принимаю правильный путь, и он сказал, что нужно 5 минут, чтобы принять :) –

Смежные вопросы