Нельзя использовать переменную для указания имени столбца в операторе вставки. Имя столбца должно быть stati c.
. Вы можете использовать Dynami c SQL, однако в этом случае вы можете просто условно вставить значение в правильный столбец, используя выражение case следующим образом:
CREATE PROCEDURE StoreTemp
(
@Temperature float
, @Seconds int
, @SessionId int
, @DatasetId int
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Unit varchar(20), @TempCol varchar(20);
SELECT @Unit = RecordingUnit from ReadLastUnit;
--SELECT @TempCol = (case @Unit when 'Celsius' then 'Temperature_C' else 'Temperature_F' END);
INSERT INTO DATASET (Temperature_C, Temperature_F, [Time])
SELECT
CASE WHEN @Unit = 'Celsius' THEN @Temperature ELSE NULL END
, CASE WHEN @Unit != 'Celsius' THEN @Temperature ELSE NULL END
, GETDATE();
END
GO
Для повышения производительности и более точного запроса, вы можете даже упростить insert
, чтобы сделать все это, например,
INSERT INTO DATASET (Temperature_C, Temperature_F, [Time])
SELECT
CASE WHEN RecordingUnit = 'Celsius' THEN @Temperature ELSE NULL END
, CASE WHEN RecordingUnit != 'Celsius' THEN @Temperature ELSE NULL END
, GETDATE()
from ReadLastUnit;
То есть, если вы всегда можете гарантировать одну строку в ReadLastUnit
.