Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 是否可以更新记录中与where子句中使用的字段相同的字段_Sql - Fatal编程技术网

Sql 是否可以更新记录中与where子句中使用的字段相同的字段

Sql 是否可以更新记录中与where子句中使用的字段相同的字段,sql,Sql,我知道这个问题听起来不现实,下面是我试图做的一段代码 UPDATE Players SET PlayerID = 100, Name = 'L. Messi', PlayerWebsite = 'www.messi.com' WHERE (PlayerID = 43) 看,我正在尝试更新一个值,我已经在where子句中使用了这个值 我知道这根本没有道理!但是,如果我想这样做,有没有一种可能的方法或技巧呢?如果这是可能的,你认为这是坏习惯还是会引起问题 提前感谢=) 编辑 如果我之

我知道这个问题听起来不现实,下面是我试图做的一段代码

UPDATE    Players
SET PlayerID = 100, Name = 'L. Messi', PlayerWebsite = 'www.messi.com'
WHERE     (PlayerID = 43)
看,我正在尝试更新一个值,我已经在where子句中使用了这个值 我知道这根本没有道理!但是,如果我想这样做,有没有一种可能的方法或技巧呢?如果这是可能的,你认为这是坏习惯还是会引起问题

提前感谢=)

编辑
如果我之前不清楚,我很抱歉,但此查询不运行

是的,这就是正确的方式。这种方法一直在使用,例如,用于乐观并发。where子句在更新记录之前验证每个字段是否具有预期值。如果在您第一次检索记录和保存更改之间有其他人编辑了记录,则不会更新任何记录。

从技术上讲,这是可能的,但更改主键(
PlayerID
是您的PK,我打赌)是一种奇怪的做法。

您不需要技巧就可以做到这一点。这是允许的,您的代码应该可以工作

但是,如果ID列是一个键,那么如果ID已经存在,您将无法访问它

要查看该列是否为键,请尝试运行以下命令:

SELECT K.TABLE_NAME,
K.COLUMN_NAME,
K.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K
ON C.TABLE_NAME = K.TABLE_NAME
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND K.COLUMN_NAME = 'PlayerID';
如果返回一行,则该行是主键,在更新记录之前,需要检查要更改的ID是否存在

编辑: 由于它是一个
IDENTITY
列,您需要使用一些技巧来绕过它:


或者您不能将其设置为
标识

我相信这是可能的,但在ID字段上执行此操作肯定是不好的做法,除非您正在执行一次性迁移操作。

如果其他表依赖PlayerId,否则不会。它确实依赖于其他表,其他表也依赖于它,但我不能只指定“更新时”要做什么吗?如果它是主键,则无法更新标识列“PlayerID”-那么您永远不应该更改它,这是主键的一部分。id不存在,但列id会自动递增,这就是问题所在吗-因为我的查询不运行,所以它不是一次性的,虽然很少使用,但它只是我想添加的一个高级选项…顺便说一句,它与其他表连接,但我可以指定“更新时”执行什么操作吗?