Простая инструкция обновления SQL от select с нежелательными результатами - PullRequest
0 голосов
/ 18 октября 2019

Ниже приведен оператор

UPDATE
  [dbName].[dbo].[tableName]
SET
  [tableName].[columnName] = NULL
SELECT
  [tableName]
FROM [dbName].[dbo].[tableName]
WHERE
  [columnName] like 'match%'

Я думал, что единственные значения в columnName, начинающемся с 'match', будут заменены на 'NULL', однако, к моему удивлению, все значения в columnName были заменены.

Буду признателен за некоторые объяснения этого.

1 Ответ

1 голос
/ 18 октября 2019

Вы используете два разных оператора SQL, потому что у вас неверный синтаксис:

UPDATE
  [dbName].[dbo].[tableName]
SET
  [tableName].[columnName] = NULL

... и ...

SELECT
  [tableName]
FROM [dbName].[dbo].[tableName]
WHERE
  [columnName] like 'match%'

Первый UPDATE устанавливает все строкив таблице NULL. Вторая SELECT затем возвращает все строки, где [columnName] like 'match%' (из которых не будет ни одной, поскольку вы просто установили их все в NULL).

Вы хотите

UPDATE
      [dbName].[dbo].[tableName]
SET
      [tableName].[columnName] = NULL
WHERE
      [columnName] like 'match%'

синтаксис с предложением FROM (но без SELECT) будет выглядеть следующим образом:

UPDATE
      [dbName].[dbo].[tableName]
SET
      [tableName].[columnName] = NULL
FROM 
      [dbName].[dbo].[tableName]
WHERE
      [columnName] like 'match%'

..., что позволит вам использовать JOIN s и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...