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