网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.从三个不同的层次实现对数据库数.
.SQLServer数据库维护计划莫名其妙.
.sql server数据库中选出指定范围.
.SQL 在什么情况下使用全表扫描 .
.sql server 2000中循环插入100万.
.SQL Server 2000中生成XML的小技.
.如何导出sql2005的数据库才能够导.
.Sql Server 2000数据库日志日益庞.
.SQL Server补丁版本的检查和安装.
.使用正规表达式编写更好的SQL.
.带你轻松接触一个数据库的备份和.
.修改SQL Server 2005 sa用户密码.
.用UTL_INADDR包获取已经连接用户.
.全面解析基于空间数据库的数据挖.
.巧用dbms_rowid包获得rowid的详细.
.讲解Informix安全特性保护数据的.
.SELECT语句中“加锁选项”功能说.
.一个用于跟踪和发现程序错误的触.
.在SQLServer中怎么样恢复数据的存.
.SQL Server 2005 - 善用 OPENROW.

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

发表日期:2007-8-26


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导入excel数据之Bug! 人气:2930
下一篇:[sql server]存储过程事务 人气:5871
浏览全部存储过程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐