博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL语句大小写是否区分的问题,批量修改整个数据库所有表所有字段大小写
阅读量:6612 次
发布时间:2019-06-24

本文共 3564 字,大约阅读时间需要 11 分钟。

一、实例介绍

SQL语句大小写到底是否区分呢?我们先从下面的这个例子来看一下:

例:

--> 创建表,插入数据:

declare @maco table (number int,myvalue varchar(2))insert into @maco select 1,'aa' union allselect 2,'Aa' union allselect 3,'aA' union allselect 4,'AA'--不区分大小写select * from @maco WHERE nn='aa'--区分大小写select  * from @maco WHERE nn='aa' collate Chinese_PRC_CS_AI

  

注:我用的是Sql Server 2005。

从上面的例子我们可以看到第一句不区分,而第二句区分。可是每个语句不能都加上个collate Chinese_PRC_CS_AI吧?

 

我们可以这样,看下面的例子:

例:

--不区分大小写ALTER TABLE My_table ALTER Column colname nvarchar(100) collate Chinese_PRC_CI_AS     --区分大小写  ALTER TABLE My_table ALTER Column colname nvarchar(100) collate Chinese_PRC_CS_AS

  

从上面的例子我们可以看到第一句不区分,而第二句区分。可是我们不能每个表都进行一下修改吧?

我们可以再这样,看下面的例子:

例:

--不区分大小写  ALTER DATABASE databasename collate Chinese_PRC_CI_AS    --区分大小写   ALTER DATABASE databasename collate Chinese_PRC_CS_AS

  

批量修改数据库中所有表内字段大小写敏感

如:

DECLARE @collate nvarchar(100);DECLARE @table nvarchar(255);DECLARE @column_name nvarchar(255);DECLARE @column_id int;DECLARE @data_type nvarchar(255);DECLARE @max_length int;DECLARE @row_id int;DECLARE @sql nvarchar(max);DECLARE @sql_column nvarchar(max);DECLARE @is_nullable int;DECLARE @nullornot nvarchar(255);SET @collate = 'Chinese_PRC_CS_AS'; --不区分大小写:  Chinese_PRC_CI_AS    区分大小写 :Chinese_PRC_CS_ASDECLARE local_table_cursor CURSOR FORSELECT [name]FROM sysobjectsWHERE OBJECTPROPERTY(id, N'IsUserTable') = 1OPEN local_table_cursorFETCH NEXT FROM local_table_cursorINTO @tableWHILE @@FETCH_STATUS = 0BEGIN    DECLARE local_change_cursor CURSOR FOR    SELECT ROW_NUMBER() OVER (ORDER BY c.column_id) AS row_id        , c.name column_name        , t.Name data_type        , c.max_length        , c.column_id		, c.is_nullable    FROM sys.columns c    JOIN sys.types t ON c.system_type_id = t.system_type_id    LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id    LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id    WHERE c.object_id = OBJECT_ID(@table)    ORDER BY c.column_id    OPEN local_change_cursor    FETCH NEXT FROM local_change_cursor    INTO @row_id, @column_name, @data_type, @max_length, @column_id,@is_nullable    WHILE @@FETCH_STATUS = 0    BEGIN        IF (@max_length = -1) OR (@max_length > 4000) SET @max_length = 4000;		IF (@is_nullable = 1) SET @nullornot=' not null' ELSE SET @nullornot=''        IF (@data_type LIKE '%char%')        BEGIN TRY            SET @sql = 'ALTER TABLE ' + @table + ' ALTER COLUMN ' + @column_name + ' ' + @data_type + '(' + CAST(@max_length AS nvarchar(100)) + ') COLLATE ' + @collate  +' ' +@nullornot            PRINT @sql            EXEC sp_executesql @sql        END TRY        BEGIN CATCH          PRINT 'ERROR: Some index or constraint rely on the column ' + @column_name + '. No conversion possible.'          PRINT @sql        END CATCH        FETCH NEXT FROM local_change_cursor        INTO @row_id, @column_name, @data_type, @max_length, @column_id,@is_nullable    END    CLOSE local_change_cursor    DEALLOCATE local_change_cursor    FETCH NEXT FROM local_table_cursor    INTO @tableENDCLOSE local_table_cursorDEALLOCATE local_table_cursorGO

  

 

 

二、参数介绍

 

Chinese_PRC_指针对大陆简体字UNICODE的排序规则。

排序规则的后半部份(即后缀)含义:

_BIN 二进制排序_CI(CS) 是否区分大小写:CI不区分,CS区分

_AI(AS) 是否区分重音:AI不区分,AS区分   

_KI(KS) 是否区分假名类型:KI不区分,KS区分 

_WI(WS) 是否区分宽度:WI不区分,WS区分

 

三、整体介绍

 

在安装SQL时,我们可以选择区分大小写或安装完以后重建mastar,再选择区分大小  

下面是rebuildm.exe 的路径:

C:/Program  Files/Microsoft  SQL Server/80/Tools/Binn/rebuildm.exe        

若要修改排序规则,按照上面的参数设置即可。

若只修改一个表,用ALTER   TABLE语句

若修改一个库的默认排序规则,用ALTER DATABASE语句    

若修改整个服务器的默认排序规则,用Rebuildm.exe重建master库

转载地址:http://gpaso.baihongyu.com/

你可能感兴趣的文章
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
Ubuntu+Apache+PHP+Mysql环境搭建(完整版)
查看>>
于ssh端口转发的深入实例[转 - 当当 - 51CTO技术博客
查看>>
从Python安装到语法基础,这才是初学者都能懂的爬虫教程 ...
查看>>
Oracle数据库安全加固记录
查看>>
安全运维之:Linux系统账户和登录安全
查看>>
Kafka Offset Storage
查看>>
深度学习笔记之CNN(卷积神经网络)基础
查看>>
JAVA设计模式之【原型模式】
查看>>
Hadoop 添加删除数据节点(datanode)
查看>>
33.8. slb configuration
查看>>
ext的window如何隐藏水平滚动条
查看>>
71.8. Run level shell script to start Oracle 10g services on RedHat Enterprise Linux (RHAS 4)
查看>>
SAP QM Transfer of Inspection Stock
查看>>
全新视觉| 数治省市:SAP大数据构想一切可能
查看>>
ORACLE expdp备份与ORA-31693、ORA-02354、ORA-02149
查看>>
DBMS_STATS.GATHER_TABLE_STATS
查看>>
Java-单机版的书店管理系统(练习设计模块和思想_系列 五 )
查看>>
嵌入式 详解udev
查看>>