SQL Server 用于更新空值记录的SQL查询

xtfmy6hx  于 2023-02-11  发布在  其他
关注(0)|答案(5)|浏览(274)

我想SQL查询更新记录。例如,有3列在我的表-
姓名、地址、电子邮件
当我更新任何一列时,其他列的值应该为空,而不设置为空。

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

在上述情况下,仅名称列应更新,其他列应更新为空。
仅供参考
因为有两列需要设置为null,所以我需要一些查询来实现。比如-

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

我只想更新名称,并希望其余的字段应该为空。

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

则更新后的输出应为-

ID    ADDRESS      NAME      EMAIL     
1     NULL         NICK      NULL
f4t66c6m

f4t66c6m1#

像这样试试,

--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
jum4pzuy

jum4pzuy2#

一个快速的想法a可以满足您的需求,那就是使用两个语句:
1.一个使所有内容(除了id)都为null的函数=〉在这个函数上放置一个触发器,它在第二个Update语句之前执行。
1.另一个函数用实际值更新所需的列。
您可以重新考虑表结构,使其更简单:

ID | Column_Name | Column_Value

而不是拥有一个包含NULL列的庞大表,例如:

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

8wtpewkr3#

我的建议是,删除该记录并插入一个新的记录,其中只有列在事务中有值。因为,我认为您不希望将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对其进行管理

hs1rzwqc

hs1rzwqc4#

您可以为此创建触发器。

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
4sup72z8

4sup72z85#

DECLARE @NVC_Query nvarchar(max) = ''

SET @NVC_Query = 'UPDATE  Tour_Table
SET'

 select @NVC_Query += '
    ' + columns.name + ' = NULL ,'
from sys.tables INNER JOIN
     sys.columns
ON tables.object_id = columns.object_id
WHERE tables.name = 'Your table'
  AND columns.name <> 'The only col you want to update'

SET  @NVC_Query += '
     your colum = your_val
WHERE Yourcondition'

--SELECT @NVC_Query
EXEC SP_EXECUTESQL @NVC_Query

使用动态SQL来完成你想要完成的任务,这比前面所有的答案都要简单得多

相关问题