您的位置:首页技术文章
文章详情页

MS SQL Server存储过程参数的隐式类型转换

【字号: 日期:2023-11-03 10:24:13浏览:2作者:猪猪

Microsoft SQL Server 2000数据表的列和存储过程的参数都是有类型的,但我发现在写存储过程时很多参数类型是可以“混用”的,比如,下面的存储过程:

/**//* Name :;Stp_TestDifferentParaType_INT Function :测试不同参数类型对存储过程的影响 Author :Waxdoll Cheung Date :;2005-04-07 */ CREATE PROCEDURE dbo.Stp_TestDifferentParaType_INT -- 统计年月 @TongJiNianYue INT AS SELECT [FM_产品登记].* FROM [FM_产品登记] WHERE (所属年份 = @TongJiNianYue); RETURN GO

和下面的存储过程:

/**//* Name :;Stp_TestDifferentParaType_CHAR Function :测试不同参数类型对存储过程的影响 Author :Waxdoll Cheung Date :;2005-04-07 */ CREATE PROCEDURE dbo.Stp_TestDifferentParaType_CHAR -- 统计年月 @TongJiNianYue CHAR(4) AS SELECT [FM_产品登记].* FROM [FM_产品登记] WHERE (所属年份 = @TongJiNianYue); RETURN GO

在测试存储过程时输出的结果是一样的,而数据列是有类型的——CHAR(4), 为什么呢?应该是存储过程在执行时对参数进行了隐式类型转换。

但写存储过程时确定参数的类型时应该注意: 1、应该尽量使用和数据列类型相同的数据类型,减少运行是的隐式类型转换; 2、不是所有类型都可以进行隐式类型转换的,如果使用不同的数据类型,很可能会发生错误:; 图:Microsoft SQL Server数据类型转换图

另外,SQL Server自定义函数的参数也有类似情况。

标签: Sql Server 数据库