SQL Query用于更新具有空值的记录

时间:2016-05-10 08:25:06

标签: sql-server sql-update

我希望sql查询更新记录。例如,我的表中有3列 -

姓名,地址,电子邮件

当我更新任何一列时,其他列的值应该为null而不设置为null。喜欢

Update tbl_Student set Name = 'XYZ' where id = 1

在上述情况下,只有Name列应该更新,其他列应该更新为null。

FYI,

由于有两列我需要设置null,这就是为什么我想要某种查询来做到这一点。喜欢 -

ID    ADDRESS      NAME      EMAIL     
1     PARK ROAD    JOHN      john@gmail.com

我想只更新名称,并希望其余字段应为null.Like

Update Table SET NAME = 'NICK' WHERE ID = 1

然后更新的输出应为 -

ID    ADDRESS      NAME      EMAIL     
1     NULL         NICK      NULL

5 个答案:

答案 0 :(得分:0)

一个能够完成你想要的东西的快速想法是有两个陈述:

  1. 使一切变为空的(除了id)=>在第二个Update语句之前执行的触发器上设置一个触发器。

  2. 另一个用实际值更新您需要的列。

  3. 您可以重新考虑表结构为更简单的结构:

    ID | COLUMN_1 | COLUMN_2 | ..... | COLUMN N
    --------------------------------------------
    2  |   NULL   |   NULL   |       | "string"
    

    而不是像NULL列那样有一个巨大的表:

    {{1}}

答案 1 :(得分:0)

试试这个,

    --Case-1
If @NAME is not null
UPDATE tbl_Student
SET NAME = @NAME
    ,Address = null
    ,Email = null
WHERE id = 1
--Case-2
If @Address is not null
UPDATE tbl_Student
SET NAME = null
    ,Address = @Address
    ,Email = null
WHERE id = 1
--Case-3
If @Email is not null
UPDATE tbl_Student
SET NAME =null
    ,Address = null
    ,Email = @Email
WHERE id = 1

答案 2 :(得分:0)

您可以为此创建触发器。

CREATE TRIGGER [dbo].[TRG_UPD_STUDENT] ON [dbo].[tbl_Student]
FOR UPDATE
AS

IF UPDATE(Name) and  (inserted.name <> NULL)
 BEGIN
  Update tbl_Student set Address = NULL, Email = NULL where id = inserted.id
 END

IF UPDATE(Address) and (inserted.Address <> NULL)
 BEGIN
  Update tbl_Student set name = NULL, Email = NULL where id = inserted.id
 END

IF UPDATE(Email) and (inserted.Email <> NULL)
 BEGIN
 Update tbl_Student set name = NULL, Address = NULL where id = inserted.id
 END

答案 3 :(得分:0)

我的建议是,删除该记录并插入一个新记录,只有该列在事务中具有值。因为,我认为您不想将NULL设置为列id(也可能是其他一些列)。

样品:

DELETE FROM tbl_Student WHERE id = 1
INSERT INTO tbl_Student(id,Name) VALUES(1,'XYZ') --All other column will be nullable 

注意: - 如果id列是IDENTITY,那么您必须使用SET IDENTITY_INSERT

进行管理

答案 4 :(得分:0)

void

使用动态SQL来完成您要完成的任务。它比以前的所有答案都容易得多