加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer数据库查询,类型转换,NTEXT,NVARCHAR

发布时间:2020-12-12 13:55:52 所属栏目:MsSql教程 来源:网络整理
导读:???????? 在数据库查询时,需要对数据类型进行转化,如我在建表是声明一个字段为DESCRIPTION设置类型为Ntext类型,那么我在查询是利用nvarchar类型的作为判断条件则将报错,这时我们需要对DESCRIPTION类型进行转化,使用CONVERT(NVARCHAR(N),DESCRIPTION)即

???????? 在数据库查询时,需要对数据类型进行转化,如我在建表是声明一个字段为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 WHERE PACKAGE_LEVEL_ID=@PACKAGE_LEVEL_ID AND
????????????????????????????????????? SERVICE_LEVEL_NAME=@SERVICE_LEVEL_NAME
?????????????????????? ??? ELSE
???????????????????????????????????? SELECT * FROM T_SERVICE_LEVEL_YOURNAME WHERE PACKAGE_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,
?@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)

从长度上就看出第二种简单不少。第二种要注意的是,在字符串连接时,需要将所有不是字符串的类型的全部转化成字符串,包含int类型的数字。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读