SQL Обновить строки таблицы, где задано значение c - PullRequest
0 голосов
/ 24 января 2020

У меня есть следующая таблица на сервере SQL.

SQL table

Она называется ScenarioData, и я использую данные специально для столбца fieldValue, чтобы добавить эти данные в форму. Я достиг этой функциональности, но, к сожалению, для формы требуется дата начала, которая должна быть текущей или до 30 дней в будущем. Поскольку я храню данные в базе данных, как только проходит дата, эти значения являются избыточными. У меня есть хранимая процедура, которая выбирает все значения из этой таблицы на основе sceneDataId.

Я думал, чтобы убедиться, что дата всегда жизнеспособна, я мог бы добавить в эту хранимую процедуру, чтобы обновить соответствующие строки (coverStartDateDay, coverStartDateMonth , coverStartDateYear) с текущей датой, чтобы значение всегда принималось.

Я выполнил следующее SQL

UPDATE dbo.ScenarioData
SET ScenarioData.FieldValue = DAY(CURRENT_TIMESTAMP)
WHERE ScenarioData.FieldName = "CoverStartDateDay";

Это, я надеялся, добавит текущий день к строк в feilfValue, где столбец fieldName равен значению coverStartDateDay. К сожалению, я получаю сообщение о том, что CoverStartDateDay не является столбцом. Во-первых, где я ошибаюсь, во-вторых, как мне достичь желаемой функциональности?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Использовать одинарные кавычки:

WHERE ScenarioData.FieldName = 'CoverStartDateDay';

В SQL Двойные кавычки сервера считаются именем столбца. Тем не менее, двойные кавычки имеют различное использование в зависимости от настройки QUOTED_IDENTIFIER.

По умолчанию QUOTED_IDENTIFIER включено (ON), и вы не можете использовать его для включения буквальных строк.

Например, если вы хотите go с двойными кавычками, тогда вам нужно отключить QUOTED_IDENTIFIER.

SET QUOTED_IDENTIFIER OFF
2 голосов
/ 24 января 2020

Попробуйте, так как varchar или string значения должны передаваться в одинарных кавычках, а не в двойных.

UPDATE dbo.ScenarioData
SET ScenarioData.FieldValue = DAY(CURRENT_TIMESTAMP)
WHERE ScenarioData.FieldName = 'CoverStartDateDay'

Двойные кавычки предназначены для идентификаторов. Так или иначе, если вы хотите передать значения, которые содержат одну кавычку, то вы можете использовать '', т. Е. Два раза одну кавычку, а не двойную кавычку.

...