使用.NET文档中的示例:
private static void AddSqlParameter(SqlCommand command, string paramValue)
{
SqlParameter parameter = new SqlParameter("@Description", SqlDbType.VarChar, 88);
parameter.IsNullable = true;
parameter.Direction = ParameterDirection.Output;
parameter.Value = paramValue;
command.Parameters.Add(parameter);
}
如果相应的存储过程有DECLARE @Description varchar(100)
且表本身的列Description
设置为VARCHAR(100)
,那么当paramValue
长度为100个字符时会发生什么? SqlParameter.Value
在绑定/执行SQL Server存储过程之前是否会截断?
答案 0 :(得分:3)
因此,无论这是否能准确回答您的问题,这都是我找到的。
SqlParameter
对象包含全长字符串(即使您已指定它的长度为88个字符)。这是有道理的,因为如果它没有,你事后改变了,你就会丢失数据。另外,这是C#管理的不必要的开销,所以如果这种截断是自愿的,我会感到惊讶。
虽然查看查询计划,但ParameterCompiledValue是截断的版本。所以它发生在那里之间(我猜想当SqlClient库将SqlCommand对象转换为对数据库运行的实际TSQL语句时)。
如果您的应用程序比数据库更具限制性,那么什么都不会爆炸。但它将尊重您对SqlParameter施加的大小限制,无论数据库可以合理地保留什么。