2016-05-04 56 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台是TINH在本地,二是SQL_HOME.QLXNK.dbo.TINH

  • 表1(MaTinh炭(4)主键不为空,TenTinh VARCHAR(50))
  • 表2(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分钟接受:) –

相关问题