SQLServer数据库查询,类型转换,NTEXT,NVARCHAR
来源:互联网 发布:全球离婚率数据 编辑:程序博客网 时间:2024/05/17 12:23
在数据库查询时,需要对数据类型进行转化,如我在建表是声明一个字段为DESCRIPTION设置类型为Ntext类型,那么我在查询是利用nvarchar类型的作为判断条件则将报错,这时我们需要对DESCRIPTION类型进行转化,使用CONVERT(NVARCHAR(N),DESCRIPTION)即可。
在编写查询SQL语句时,我会两种方式,一种是全用“逻辑形式”,另一种是使用字符串拼接。第一种更好操作易懂,但是查询条件增加到三个时就感觉很多了更不用说四个五个条件。第二种理解有那么一点点难,不过对付多条件查询很好用,对于查询,我更倾向于第二种方法。下面列出一个小项目里的例子:
项目要求,根据3个条件查询,第二个和第三个条件实现模糊查询。每个条件可有可无。
第一种方法:
CREATE PROC NET_SELECT_SERVICE_LEVEL
(
@PACKAGE_LEVEL_ID INT,
@SERVICE_LEVEL_NAME NVARCHAR(50),
@DESCRIPTION NVARCHAR(1000)
)
AS
IF @PACKAGE_LEVEL_ID<>0--当用户Id不为0
BEGIN
IF @SERVICE_LEVEL_NAME=''--服务等级为空,将出现两种情况
BEGIN
IF @DESCRIPTION=''--描述为空
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE PACKAGE_LEVEL_ID = @PACKAGE_LEVEL_ID
ELSE--描述不为空
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE PACKAGE_LEVEL_ID = @PACKAGE_LEVEL_ID AND
CONVERT(NVARCHAR(1000),DESCRIPTION) LIKE '%'+@DESCRIPTION+'%'
END
ELSE--服务等级不为空,则也有两种
BEGIN
IF @DESCRIPTION=''
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHEREPACKAGE_LEVEL_ID=@PACKAGE_LEVEL_ID AND
SERVICE_LEVEL_NAME=@SERVICE_LEVEL_NAME
ELSE
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHEREPACKAGE_LEVEL_ID=@PACKAGE_LEVEL_ID AND
SERVICE_LEVEL_NAME LIKE '%'+@SERVICE_LEVEL_NAME+'%' AND CONVERT(NVARCHAR(1000),DESCRIPTION)
LIKE '%'+@DESCRIPTION+'%'
END
END
ELSE--用户的ID为0
BEGIN
IF @SERVICE_LEVEL_NAME=''--服务为空
BEGIN
IF @DESCRIPTION=''
SELECT * FROM T_SERVICE_LEVEL_YOURNAME
ELSE
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE CONVERT(NVARCHAR(1000),DESCRIPTION) LIKE'%'+@DESCRIPTION+'%'
END
ELSE--服务不为空
BEGIN
IF @DESCRIPTION=''
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE SERVICE_LEVEL_NAME LIKE'%'+@SERVICE_LEVEL_NAME+'%'
ELSE
SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE SERVICE_LEVEL_NAME LIKE'%'+@SERVICE_LEVEL_NAME+'%'
AND CONVERT (NVARCHAR(1000),DESCRIPTION) LIKE'%'+@DESCRIPTION+'%'
END
END
代码可以考到SQLServer中进行,那样显示更清晰些,排版也好些:
第二种方法:
ALTER PROC [dbo].[NET_SELECT_SERVICE_LEVEL]
(
@PACKAGE_LEVEL_ID INT,
@SERVICE_LEVEL_NAME NVARCHAR(50),
@DESCRIPTION NVARCHAR(1000)
)
AS
DECLARE @SQL NVARCHAR(1500)
SET @SQL=''
IF @PACKAGE_LEVEL_ID <>0
SET @SQL=@SQL+'PACKAGE_LEVEL_ID='+CONVERT(NVARCHAR(20),@PACKAGE_LEVEL_ID)
IF @SERVICE_LEVEL_NAME <>''
BEGIN
IF @SQL=''
SET @SQL=@SQL+'SERVICE_LEVEL_NAME LIKE ''%'+@SERVICE_LEVEL_NAME+'%'''
ELSE
SET @SQL=@SQL+' AND SERVICE_LEVEL_NAME LIKE ''%'+@SERVICE_LEVEL_NAME+'%'''
END
IF @DESCRIPTION<>''
BEGIN
IF @SQL=''
SET @SQL=@SQL+'DESCRIPTION LIKE ''%'+@DESCRIPTION+'%'''
ELSE
SET @SQL=@SQL+' AND DESCRIPTION LIKE ''%'+@DESCRIPTION+'%'''
END
IF @SQL=''
EXEC('SELECT * FROM T_SERVICE_LEVEL_YOURNAME')
ELSE
EXEC('SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE '+@SQL)
- SQLServer数据库查询,类型转换,NTEXT,NVARCHAR
- SQLServer数据库日期类型转换
- SqlServer 中使用Jtds驱动连接数据库,如果字段类型为ntext,可能查询输出的为Object: net.sourceforge.jtds.jdbc.ClobImpl@66fa192
- 用SQL语句将一字段的ntext数据类型,转换成Nvarchar数据类型,其他类型的方法类似
- varchar、text和nvarchar、ntext类型的区别
- 过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'
- 过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'。
- 数据库时间类型转换(Oracle、SQLServer)
- 数据库时间类型转换(Oracle、SQLServer)
- sqlserver的字段char、varchar、text和nchar、nvarchar、ntext理解
- sqlserver数据类型char和nchar,varchar和nvarchar,text和ntext的用法以及区别
- Sqlserver 如何修改替换text,ntext类型字段
- NTEXT类型
- char...varchar...nchar...nvarchar...ntext
- nvarchar(MAX) 、ntext的差别
- Oracle各种类型的运用|char、varchar、text和nchar、nvarchar、ntext的区别
- oracle中nvarchar和varchar类型转换
- SQL2005中讲ntext类型转换为XML类型
- Mono在Full AOT模式下的限制
- Jquery Dialog Iframe
- 超实用的Java数组技巧攻略
- 【假如U盘的系统没显示符该怎么办】
- 浅学设计模式之简单工厂模式、工厂模式、抽象工厂模式
- SQLServer数据库查询,类型转换,NTEXT,NVARCHAR
- SQL SERVER 取本月上月日期
- win7 同步 局域网 两台电脑 时间
- 检查php文件中是否含有bom的php文件
- uboot基础知识
- [转]老码农教你学英语:补充一些英语学习素材
- 【摘录】游戏从业者对准备涉足游戏行业晚辈们的忠告
- patch用法
- 【&5个小秘方帮你快速清除U盘的使用情况&】