varchar(8000)参数不会截断更长的数据

时间:2016-01-30 09:25:27

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

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

在数据库A中: -

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

cannot resolve the Symbol"fragment_main

在数据库B中: -

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

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

我刚在两个测试数据库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