Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询以更新部门_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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:检查更新结果并回复状态。