不要被数据库的collation设置为大小写不敏感(case-insensitive)所欺骗

USE master 

--使用语句 COLLATE SQL_Latin1_General_CP1_CI_AS将数据库设置为大小写不敏感
CREATE DATABASE [DB1] ON PRIMARY ( name = N'DB1', filename = N'C:/DATA/DB1.mdf', 
size = 4048kb, filegrowth = 1024kb ) LOG ON ( name = N'DB1_log', filename = 
N'C:/DATA/DB1_log.ldf', size = 4024kb, filegrowth = 10%) COLLATE 
sql_latin1_general_cp1_ci_as 

GO 

USE [DB1] 

GO 

IF NOT EXISTS (SELECT name 
               FROM   sys.filegroups 
               WHERE  is_default = 1 
                      AND name = N'PRIMARY') 
  ALTER DATABASE [DB1] MODIFY filegroup [PRIMARY] DEFAULT 

GO 

CREATE TABLE A 
  ( 
     A INT PRIMARY KEY, 
     B VARCHAR(50) 
  ) 

--运行正常 
SELECT * 
FROM   a 
WHERE  a = 1 
       AND b = '2' 

GO
--如上语句,可以正常创建
CREATE PROCEDURE Proc1 
AS 
  SELECT * 
  FROM   a 
  WHERE  a = 1 
         AND b = '2' 
GO

--创建失败因为@ID不存在,也就说@Id和@ID区别对待(大小写还是敏感的!!)
CREATE PROCEDURE Proc2 (@Id INT) 
AS 
BEGIN 
      SELECT * 
      FROM   a 
      WHERE  a = @ID 
             AND b = '2' 
END 
GO

--将@ID改正为@Id后重新创建,成功!!
CREATE PROCEDURE Proc3 (@Id INT) 
AS 
  BEGIN 
      SELECT * 
      FROM   a 
      WHERE  a = @Id 
             AND b = '2' 
  END 

GO
--创建失败因为@ID不存在,也就说@Id和@ID区别对待(大小写还是敏感的!!)
CREATE TRIGGER trtest2 
ON a 
AFTER INSERT, UPDATE 
AS 
  BEGIN 
      DECLARE @Id INT 
 SET @ID = 0
      IF EXISTS(SELECT * 
                FROM   inserted) 
        BEGIN 
            SET @ID=(SELECT COUNT(*) 
                     FROM   inserted) 
        END 

      PRINT CONVERT(NVARCHAR(20), @ID) + 
            ' rows has been added/updated in table A!' 
  END 

GO 

--将@ID改正为@Id后重新创建,成功!!
CREATE TRIGGER trtest1 
ON a 
AFTER INSERT, UPDATE 
AS 
  BEGIN 
      DECLARE @Id INT 

      IF EXISTS(SELECT * 
                FROM   inserted) 
        BEGIN 
            SET @Id=(SELECT COUNT(*) 
                     FROM   inserted) 
        END 

      PRINT CONVERT(NVARCHAR(20), @Id) + 
            ' rows has been added/updated in table A!' 
  END 

GO 

--调用时大小写不匹配,执行成功!
EXEC Proc3 @iD=3 

INSERT INTO a 
SELECT 5, '2'
UNION 
SELECT 6, '2'  

USE master   
DROP DATABASE DB1
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值