`
Mr_Chunlei
  • 浏览: 28834 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

在数据库查询时,需要对数据类型进行转化,如我在建表是声明一个字段为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+'%'

ANDCONVERT (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)

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

相关推荐

    sqlserver数据库类型对应Java中的数据类型

    SQL Server 数据库类型对应 Java 中的数据类型 SQL Server 是一个关系数据库管理系统,Java 是一个广泛使用的编程语言。在 Java 中,对数据库的操作需要通过 JDBC(Java Database Connectivity)来实现,而在 JDBC ...

    关于在SQL Server数据库系统中存取BLOB数据的探讨.pdf

    同时,使用SQL Server数据库系统也可以提高数据的查询速度和处理效率。 在开发设备管理信息系统中,笔者使用了B/S编程模式,前台在ASP环境下编写管理程序,后台使用SQL Server数据库存储数据。针对SQL Server数据库...

    SQL Server 中 text或ntext 字段内容替换方法

    在不确定text或ntext字段长度的时候 SQL Server 中 text或ntext 字段内容替换方法

    SQLserver查询数据类型为ntext是空或NULL值的方法

    SQLserver 查询数据类型为 ntext 是空或 NULL 值的方法 在 SQLserver 中,ntext 数据类型是一种文本数据类型,用于存储大容量的文本数据。但是,在查询数据类型为 ntext 的表时,遇到空或 NULL 值的情况时,需要...

    从mysql数据库迁移至sqlserver数据库

    从mysql数据库迁移至sqlserver数据库,支持2005,2008版本。 text类型建议先转换为varchar(10000)类型,否则迁移后中文会出现乱码。迁移后会自动转换为ntext类型。

    SQL Server数据库试题十及答案.doc

    本文档提供了 SQL Server 数据库试题十及答案,涵盖了 SQL Server 的基础知识、数据类型、查询语言、索引、视图、存储过程、事务等方面。 SQL Server 的基础知识 1. SQL Server 是一种关系型数据库管理系统(RDBMS...

    sql server替换textntext类型字段的值

    sql server替换textntext类型字段的值, 处理这种比较特殊的情况

    sqlServer 数据库存储图片与读取.rar

    sqlserver 存储图片,下载图片案例。c# 源码,供学习交流。

    SQL Server 2005的各种限制,table可容纳列数

    SQL Server 2005 是一个功能强大且流行的关系数据库管理系统,它具有许多限制,这些限制是为了确保数据库的稳定性、安全性和性能。在本文中,我们将详细介绍 SQL Server 2005 的各种限制,这些限制涵盖了数据库引擎...

    完美解决SQL server2005中插入汉字变成问号的问题

    2.在表中将你的汉字字段的数据类型设置为nvarchar型或ntext型,设置前最好先将表中的数据全部删除。(不要使用varchar或text型,因为它们只会继续使你的数据乱码)。 3.设置好后,关闭服务器,再重新启动,就可生效...

    SQL数据类型和范围(SQLServer,MySql,Access)

    Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。 SQL Server 数据类型 Character 字符串 数据类型 描述 存储 char(n) 固定长度的字符串。最多 8,000 个字符。 n varchar(n) 可变长度的...

    SqlServer数据库中文乱码问题解决方法

    原因分析:SQL版的乱码问题还是出现在SQL SERVER的安装设置上。默认安装时系统默认的排序规则是拉丁文的排序规则,但一般人在安装时没有考虑到这一点,安装时只是点取下一步,安装完成后,造成了SQL版在使用过程中...

    sqlserver2008数据类型[定义].pdf

    SQL Server 2008 中的字符数据类型包括 varchar、char、nvarchar、nchar、text 和 ntext 等。这些数据类型用于存储字符数据。其中,varchar 和 char 是最常用的两种字符数据类型。它们的主要区别在于数据填充方式。...

    SQL SERVER 2000开发与管理应用实例

    涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据库安全、系统表应用实例、SQL Server...

    sqlserver 中ntext字段的批量替换(updatetext的用法)

    在Sql Server 中,ntext/text/image 字段不允许应用replace函数替换内容; 2。通过convert字段转换,可以把ntext字段转换为varchar(8000),然后用Relpace函数替换,不过,此方法,对于字段长度大于8000的ntext字段...

    sqlserver中在指定数据库的所有表的所有列中搜索给定的值

    一、搜索数据是String类型 适用于搜索Text,NText,Varchar,Nvarchar,Char,NChar等类型 1、创建存储过程:My_Search_StringInGivenTable 代码如下: USE [NORTHWIND] GO /****** Object: StoredProcedure [d

    php使用sql数据库 获取字段问题介绍

    ————————————————由于sql server中,ntext和nvarchar字段是用unicode编码存储内容的,因此php通过mssql扩展读取带ntext和nvarchar类型字段的时候会抱错。 如果 title 字段类型为 nvarchar,content ...

    SQLServer笔记1

    本篇笔记主要介绍了SQL Server的基础知识,包括物理数据结构、事务日志、查询处理过程、存储过程、索引等。 物理数据结构 SQL Server的物理数据结构主要包括数据文件和事务日志文件。数据文件用于存储数据库的所有...

    Sqlserver2000经典脚本

    下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件...

Global site tag (gtag.js) - Google Analytics