【问题标题】:Get truncated when insert data by stored procedure通过存储过程插入数据时被截断
【发布时间】:2016-05-04 10:59:45
【问题描述】:

这是我的存储过程:

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

  • Table1(MaTinh char(4) 主键不为空,TenTinh varchar(50))
  • Table2(MaTinh char(4) 主键不为空,MaNuoc char(2))

当我执行时

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

我收到一个错误:

字符串或二进制将被截断

但只需正常插入 --> 就可以了!

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

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

我的存储过程有什么问题?

【问题讨论】:

    标签: sql sql-server tsql stored-procedures


    【解决方案1】:

    您需要删除变量/参数周围的'

    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);
    

    【讨论】:

    • 天哪!非常感谢你!我花了 2 个小时才弄明白,但仍然没有得到任何东西。
    • @H.Dinh 如果您的问题已经解决,您可以accept my answer :)
    • 我接受了正确的方式,它说需要 5 分钟接受 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2015-02-10
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多