笔记336 update如何判断某列是否重复,然后再执行相应动作 2013-7-27

笔记336 update如何判断某列是否重复,然后再执行相应动作 2013-7-27

 1 --update如何判断某列是否重复,然后再执行相应动作 2013-7-27
 2 
 3 http://social.msdn.microsoft.com/Forums/zh-CN/c0de5e42-aece-4b51-b595-8609926c596b/update
 4 -- 表Table_1中有三列,分别是id、name、do,注意:id是自增的标示,name这个字段是不能有重名的。
 5 --
 6 --    我现在要更新名字,首先就要对name进行判断,条件是:
 7 --
 8 --1.如果名字改变,就要判断新的名字在name字段中是否有重复值,重复了就不执行update指令,并用case 返回0(表示错误)!(例如张三我改成李四,则不执行update,并返回0)
 9 --
10 --2.如果名字不变,则执行update指令,并返回1。
11 
12 
13 USE [pratice]
14 GO
15 CREATE TABLE [dbo].[Table_1]
16 (
17   [id] [int] IDENTITY(1, 1)  NOT NULL ,
18   [name] [nchar](10) NULL ,
19   [do] [nchar](10) NULL
20 )
21 INSERT  INTO table_1 ( name, do )
22         SELECT  N'张三', N''
23         UNION ALL
24         SELECT  N'李四', N''
25         UNION ALL
26         SELECT  N'王五', N''
27        
28 SELECT * FROM [dbo].[Table_1]
29 
30 --你可以直接为 name 建立唯一约束(或者唯一索引), 这样不管是更新, 还是插入数据,
31 --如果导致重复, 都会失败并且报错
32 --
33 --一般推荐这样做, 这样不管操作是否来自那里面, 都可以保证 name 的唯一性
34 
35 
36 --模拟存储过程传入参数值
37 DECLARE @name_new NCHAR(200)
38 SET @name_new = '张三'
39 ------------------------------
40 --代码判断
41 IF NOT EXISTS ( SELECT  *
42                 FROM    [dbo].[Table_1]
43                 WHERE   name = @name_new )
44     BEGIN
45         UPDATE  [dbo].[Table_1]
46         SET     [name] = @name_new
47         WHERE   [id] = 1
48         SELECT  1
49     END
50 ELSE
51     BEGIN
52         SELECT  0
53     END
54 
55 
56 SELECT * FROM [dbo].[Table_1]
57 
58 --0:不更新  1:更新
59 
60 
61 
62 
63 --DECLARE
64 --     @name_old nchar(10),     -- 要更新的 name
65 --     @name_new nchar(10)          -- 更新后的 name, NULL 值表示保持原来的值
66 --;
67 --UPDATE [dbo].[Table_1]
68 --SET
69 --     name = ISNULL(@name_new, name)
70 --WHERE name = @name_old
71 --     AND(
72 --          @name_old = @name_new
73 --          OR @name_new IS NULL
74 --          OR NOT EXISTS(
75 --                    SELECT * FROM [dbo].[Table_1]
76 --                    WHERE name = @name_new
77 --          )
78 --     )
79     

 

posted @ 2013-08-04 22:06  桦仔  阅读(763)  评论(0编辑  收藏  举报