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

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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自定义函数的参数也有类似情况。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航