SQL查询以更新部门
我有一个特殊的场景,可以在不与现有记录发生任何冲突的情况下更新我的部门 有人能告诉我如何为它编写查询吗 这是我的需要 表SQL查询以更新部门,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个特殊的场景,可以在不与现有记录发生任何冲突的情况下更新我的部门 有人能告诉我如何为它编写查询吗 这是我的需要 表部门: DeptID DeptName ----------------------------- D001 Accounts D002 HR D003 Dev D004 Support 现在,我想更新一条现有记录,并确保它不允许重复
部门:
DeptID DeptName
-----------------------------
D001 Accounts
D002 HR
D003 Dev
D004 Support
现在,我想更新一条现有记录,并确保它不允许重复(或者deptid
或者deptname
,两者都不允许)
例:
- 案例1:当我尝试更新
D001
时,我不应该像D002、D003或D004那样提供DeptID
,因为它们已经存在
- 案例2:当我试图编辑
DeptName
时,它不应该接受任何现有的DeptName
正如@mxix所指出的,一个唯一的约束将阻止您添加重复项(您应该添加它们),但如果您尝试,它将给您一条错误消息。这里有一个查询,如果您试图添加一个现有值,它将不起任何作用
INSERT INTO Dept(DeptID)
SELECT 'ANewValue'
WHERE 'ANewValue' NOT IN (SELECT DeptId FROM Dept)
检查是否存在deptid
或deptname
,然后将值插入dept
表
对于插入:
IF NOT EXISTS(SELECT DeptID
FROM Dept
WHERE DeptID = 'D005' OR DeptName = 'maintanance')
BEGIN
INSERT INTO Dept (DeptID, DeptName) VALUES ('D005', 'maintanance')
END
对于更新:
案例1:
UPDATE Dept
SET DeptID = 'D005'
WHERE DeptName = 'some name' AND DeptID NOT IN (SELECT DeptID FROM Dept)
案例2:
UPDATE Dept
SET DeptName = 'Some name'
WHERE DeptID = 'some id' AND DeptName NOT IN (SELECT DeptName FROM Dept)
您最好将部门标识符存储为自动递增的INT
/主键。这样就可以保证ID的唯一性了
ALTER TABLE Dept
ADD DeptID int NOT NULL IDENTITY (1,1) PRIMARY KEY
如果您确实希望在值上使用格式D001
,则可以在检索数据时添加:
SELECT DeptID,
'D' + RIGHT('000' + CAST(DeptID AS VARCHAR(3)), 3)
FROM Dept
然后你只需要担心部门名称是唯一的
ALTER TABLE Dept
ADD DeptID int NOT NULL IDENTITY (1,1) PRIMARY KEY
对于部门名称,首先您应该具有防止添加重复值的应用程序逻辑,其次,您可以在尝试添加新值时执行检查:
DECLARE @DeptToAdd VARCHAR(20) = 'Cleaning'
IF NOT EXISTS (SELECT 1 FROM Dept WHERE DeptName = @DeptToAdd)
BEGIN
-- INSERT CODE IF IT DOES NOT EXIST
INSERT INTO Dept (DeptName)
VALUES (@DeptToAdd)
-- or UPDATE
UPDATE Dept
SET DeptName = @DeptToAdd
WHERE DeptId = 123
END
这将仅在该值不存在时插入或更新该值
除此之外,您还可以使用。在已回答插入的每个列上创建一个唯一的约束,这将起作用。但我在找update@jestges:检查更新结果并回复状态。