【问题标题】:varchar(8000) parameter does not truncate longer datavarchar(8000) 参数不会截断较长的数据
【发布时间】:2016-05-08 02:32:40
【问题描述】:

我在两台不同的机器上有两个数据库。两个数据库都与 Link 服务器相连。我正在从另一个数据库中定义的一个数据库调用存储过程。

在数据库 A 中:-

我有一个名为 SP_1 的存储过程,

create proc SP_1 ( @aaa varchar(8000) )
begin    
 --Logic
end

在数据库 B 中:-

我从数据库 B 调用数据库 A 的 SP_1

如果我将超过 8000 个字符传递给 SP_1,它会接受该参数。

如果我将 15000 个字符的字符串传递给 SP_1,那么理想情况下只有 8000 个字符应该能够传递给 SP_1,但它会占用所有 15000 个字符。 p>

我很困惑。 为什么参数的值没有被截断为 8000 个字符?

提前致谢。

【问题讨论】:

    标签: sql sql-server sql-server-2008 types


    【解决方案1】:

    我刚刚在两个测试数据库TEST_TT_1TEST_TT_2 上运行了这个测试脚本。打印出来:

    15000

    8000

    所以它肯定会截断传递给存储过程的变量。

    USE TEST_TT_1;
    GO
    CREATE PROCEDURE dbo.test_proc
        @tp VARCHAR(8000)
    AS
        SELECT LEN(@tp);
    GO
    
    USE TEST_TT_2;
    DECLARE @tv VARCHAR(MAX);
    SET @tv=REPLICATE(CAST('a' AS VARCHAR(MAX)), 15000);
    SELECT LEN(@tv);
    EXEC TEST_TT_1.dbo.test_proc @tv;
    GO
    
    USE TEST_TT_1;
    GO
    DROP PROCEDURE dbo.test_proc;
    GO
    

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2012-07-21
      • 1970-01-01
      • 2013-08-29
      相关资源
      最近更新 更多