我希望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
答案 0 :(得分:0)
一个能够完成你想要的东西的快速想法是有两个陈述:
使一切变为空的(除了id)=>在第二个Update语句之前执行的触发器上设置一个触发器。
另一个用实际值更新您需要的列。
您可以重新考虑表结构为更简单的结构:
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来完成您要完成的任务。它比以前的所有答案都容易得多