在存储过程中使用varchar(max)。为什么插入值被截断?

时间:2011-02-14 12:07:44

标签: sql-server-2005 enterprise-library

我是SQL 2005和Enterprise Library(版本4)的新手。我想调用一个Stored Proc并传递一个超过8000个字符的字符串。 db中的列定义为varchar(max)。我以为我首先通过从T-SQL调用存储过程进行一些测试然后我很惊讶插入的字符串值被截断,即使是短字符串也是如此。

CREATE TABLE [dbo].[ChadTest](
    [TestParam] [varchar](max) NOT NULL
) ON [CMISII_DATA]

GO

ALTER PROCEDURE [dbo].[spr_ChadTest]
(
 @TestParam varchar(max)
 )
AS
BEGIN
INSERT INTO ChadTest
   (TestParam) VALUES (@TestParam)
END

DECLARE @RC int
DECLARE @TestParam varchar

-- TODO: Set parameter values here.
SET @TestParam = '12345'
EXECUTE @RC = [CMISII].[dbo].[spr_ChadTest] 
   @TestParam

Select TestParam, len(TestParam) from chadtest

输出:

1           1

一旦我上面的这个简单示例工作,我将需要弄清楚如何使用Enterprise库从VB.NET代码将长字符串传递给SP。该参数的数据类型是什么?我看到没有重载版本的AddInParameter方法接受长度,也没有看到“varchar(max)”枚举作为可用的数据类型。

   dbCmd = db.GetStoredProcCommand("spr_ChadTest") 
    db.AddInParameter(dbCmd, "TestParam", SqlDbType.VarChar, TestParam.ToString) 

谢谢!

2 个答案:

答案 0 :(得分:1)

DECLARE @TestParam varchar 

是您的TSQL中的问题。您需要将其声明为varchar(max)数据类型,以避免在1个字符长度处截断。

答案 1 :(得分:0)

TestParam的变量定义缺少最后的(MAX)。这将解决您的SQL查询问题。以下代码将向SqlCommand添加一个参数,允许从VB .Net ASP应用程序中使用VARCHAR(MAX)

' Set up the output parameter to retrieve the summary.
Dim paramSummary As SqlParameter = New SqlParameter("@TestParam", SqlDbType.VarChar, -1)
command.Parameters.Add(paramSummary)

以下link显示更多信息