--Create sample table for illustration of issue
CREATE TABLE SAMPLETABLE (
[Order_ID] int,
[Individual_ID] int,
[SAMPLECOLUMN] varchar(50),
[FACILITY] int,
[ORDERCODE] int
)
GO
--Populate column with values including null for sample column
INSERT INTO
SELECT
TABLEX.TABLE_ID AS [Individual_ID],
TABLEX.ORDER_ID AS [Order_ID],
NULL AS [SAMPLECOLUMN],
TABLEX.FACILITY_ID AS [FACILITY],
TABLEX.ORDERCODE AS [ORDERCODE]
FROM TABLEX
--UPDATE NULL values of SAMPLECOLUMN with string values
UPDATE SAMPLETABLE
SET
SAMPLETABLE.SAMPLECOLUMN = CASE WHEN SAMPLETABLE.ORDERCODE IN ('1') THEN 'THISWILLBETHESTRING'
END
FROM SAMPLETABLE
WHERE SAMPLETABLE.SAMPLECOLUMN IS NULL
Я пытаюсь заменить нулевые значения, которые я изначально заполнил в своей таблице, с помощью оператора update. Я получаю сообщение об ошибке: «Преобразование не удалось при преобразовании значения varchar« THISWILLBETHESTRING », поскольку null имеет тип данных int, тогда как значения, которые я хочу использовать для обновления, являются строковыми. Имейте в виду, что в операторе обновления SAMPLETABLE.ORDERCODE происходит из той же таблицы, которую я обновляю.
Вот DDL, чтобы проиллюстрировать проблему:
-- DDL and sample data, start
DECLARE @start TABLE
(ID INT IDENTITY PRIMARY KEY,
data VARCHAR(20) NULL,
ordercode int);
INSERT INTO @start ([data], [ordercode])
VALUES
(NULL, '1')
,(NULL, '1')
,(NULL, '2');
-- DDL and sample data, end
SELECT *
FROM @start;
DECLARE @end TABLE
(ID INT IDENTITY PRIMARY KEY,
data VARCHAR(20) NULL,
ordercode int);
INSERT INTO @end ([data], [ordercode])
VALUES
('STRINGVALUEIWANT', '1')
,('STRINGVALUEIWANT', '1')
,('ANOTHERSTRING', '2');
-- DDL and sample data population, end
SELECT *
FROM @end;