笔记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