`

在存储过程里使用N前缀 Mssql

 
阅读更多

2011-3-31

摘自:Mssql 2005的帮助页

 

在服务器上执行的代码中(例如在存储过程和触发器中)显示的 Unicode 字符串常量必须以大写字母 N 为前缀。即使所引用的列已定义为 Unicode 类型,也应如此。如果不使用 N 前缀,字符串将转换为数据库的默认代码页。这可能导致不识别某些字符。

例如,在前面示例中创建的存储过程可以按以下方式在服务器上执行:

 
EXECUTE Product_Info @name = N'Chain'

使用 N 前缀的要求适用于服务器上产生的字符串常量和从客户端发送的字符串常量。

 

 

 

 

---------------------------------------------------------------------------------------

在数据库里定义使用Unicode的好处

 

若要使数据库识别 Unicode,除了使用 nchar、nvarchar 和 ntext 数据类型定义 Unicode 存储外,还可以定义识别 Unicode 的客户端交互。可以通过在数据库服务器端执行下列操作来定义识别 Unicode 的客户端交互:

  • 在表列以及 CONVERT() 和 CAST() 操作中,将非 Unicode 数据类型转换为 Unicode 数据类型。

  • 使用 ASCII() 和 CHAR() 函数的 Unicode 等价函数 UNICODE() 和 NCHAR() 来替换它们。

  • 以 Unicode 格式定义存储过程和触发器的变量和参数。

  • 以字母 N 为前缀标识 Unicode 字符串常量。

使用 UNICODE()、NCHAR() 和其他函数

ASCII() 函数返回所传递字符的非 Unicode 字符代码。因此,在为非 Unicode 字符串使用 ASCII 函数的情况下为 Unicode 字符串使用等价函数 UNICODE()。对于 CHAR 函数也是如此;NCHAR 是其 Unicode 的等价函数。

由于 SOUNDEX() 函数是基于英语拼音规则定义的,因此除非字符串只包含拉丁字符 A 到 Z 和 a 到 z,否则此函数对于 Unicode 字符串是没有意义的。

ASCII、CHAR 和 SOUNDEX 可以传递 Unicode 参数,但这些参数被隐式转换为非 Unicode 字符串。这可能导致处理之前 Unicode 字符丢失,因为这些函数在定义时对非 Unicode 字符串执行操作。

除了 UNICODE() 和 NCHAR() 函数以外,下列字符串操作函数会尽可能支持 Unicode:CHARINDEX()、LEFT()、LEN()、UPPER()、LOWER()、LTRIM()、RTRIM()、PATINDEX()、REPLACE()、QUOTENAME()、REPLICATE()、REVERSE()、STUFF()、SUBSTRING() 和 UNICODE()。这些函数接受 Unicode 参数,为 Unicode 字符串留出 2 字节的字符边界,并在输入参数为 Unicode 格式时使用 Unicode 排序规则进行字符串比较。

定义存储过程中的参数

使用 Unicode 数据类型定义参数可以保证客户端请求或输入在服务器上隐式转换为 Unicode 格式,并在处理中不被损坏。如果将参数指定为 OUTPUT 参数,Unicode 类型也可以在其返回到客户端时使损坏的几率降到最低程度。

在以下存储过程中,变量作为 Unicode 数据类型声明。

  复制代码
CREATE PROCEDURE Product_Info
    @name nvarchar(40)
AS
SELECT p.ListPrice, v.Name
    FROM Production.Product p 
        INNER JOIN Purchasing.ProductVendor pv
            ON p.ProductID = pv.ProductID  
        INNER JOIN Purchasing.Vendor v
            ON pv.VendorID = v.VendorID
WHERE p.Name = @name;

使用 N 前缀

在服务器上执行的代码中(例如在存储过程和触发器中)显示的 Unicode 字符串常量必须以大写字母 N 为前缀。即使所引用的列已定义为 Unicode 类型,也应如此。如果不使用 N 前缀,字符串将转换为数据库的默认代码页。这可能导致不识别某些字符。

例如,在前面示例中创建的存储过程可以按以下方式在服务器上执行:

  复制代码
EXECUTE Product_Info @name = N'Chain'

使用 N 前缀的要求适用于服务器上产生的字符串常量和从客户端发送的字符串常量。

 

分享到:
评论

相关推荐

    MySQL数据库:常量、变量.pptx

    N前缀必须为大写。只能用单引号括起字符串。 举例:N‘hello’,N‘How are you!’ Unicode 数据中的每个字符用两个字节存储,而每个ASCII字符用一个字节存储。 在字符串中不仅可以使用普通的字符,也可使用几个转义...

    google-ngrams-to-mysql:Google Ngrams的Java转换器到MySQL数据库

    MySQL数据库需要使用存储在database-model.mwb的数据库模型进行初始化。 可以运行NGramConstrainedLoader的主要方法,以使用几个不同的参数启动存储过程。 争论 描述 -文件夹 n-gram文件的文件夹 -filePrefix n-...

    mysql数据库中的索引

     1.4 MySQL不支持函数索引,支持前缀索引【对索引字段的钱N个字符创建索引(MyISAM N=1000B,InnoDB N=767B;创建表的前缀长度是以字符为单位的,使用多字节字符集的时候需要注意】;  1.5 MyISAM支持全文本索引...

    mysql数据库的基本操作语法

    提示:索引保存在information_schema数据库里的STATISTICS表中。 创建索引方式: 自动:当表上定义主键约束、唯一、外键约束时,该表会被系统自动添加上索引。 手动:手动在相关表或列上增加索引,提高查询速度。 ...

    程序员5个刷题网站-MySQLTutorials:MySQL学习教程

    程序员5个刷题网站 电商数据库设计及架构优化实战 ...- 展示商品 - 加入购物车(购物车模块)-生成订单(订单模块) 商户入住(商户模块) - 发送货物(物流模块) ...MySQL ...MySQL图形客户端程序 ...所有存储相同数据的

    doctrine2-exporter:适用于教义2MySQL Workbench Exporter

    然后,您可以使用vendor/bin/mysql-workbench-schema-export调用CLI脚本。格式化程序设置选项除mysql-workbench-schema-exporter的,还支持以下选项: 教义2.0的常用设置选项: useAutomaticRepository 自动生成...

    数据库相关的知识点!

    在使用组合索引时,若组合索引为(name,email),单独索引email时不走索引,这称为最左前缀匹配原则,最左匹配原则中,mysql会一直向右匹配知道遇到(< > between like)这一类的范围查询时停止 explain + sql查询语句,...

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    扩大 `IndexLookupJoin` 的使用范围,索引前缀匹配的场景也可以使用该算法 2.SQL 执行引擎 使用 Chunk 结构重构所有执行器算子,提升分析型语句执行性能,减少内存占用,显著提升 TPC-H 结果 支持 Streaming ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。 PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    jpivot学习总结.doc

    生成的 URL 中包含这个 member 的唯一名称,这个标签必须要在一个 table 或一个 query 的标签里嵌套使用。 这个动作还依赖于该标签的 sessionParam 属性,如果该属性存在,那么参数值将在页面显示之前写到 ...

    2009达内SQL学习笔记

    通配符在搜索模式中任意位置使用,并且可以使用多个通配符。 通配符%表示任何字符出现任意次数;还能代表搜索模式中给定位置的0个或多个字符。下划线匹配单个任意字符。 如:select table_name from user_tables ...

Global site tag (gtag.js) - Google Analytics