T-SQL приведение столбца к динамическому типу данных
Я хочу привести столбец к типу данных, который является текстовым значением в другом столбце. Я знаю, что могу сделать это с exec sp_executesql
, но если бы я мог сделать это без этого, это было бы идеально.
BEGIN TRY
DROP TABLE #1
END TRY
BEGIN CATCH
END CATCH
CREATE TABLE #1
(
ID INT IDENTITY,
DataType VARCHAR(20),
Data VARCHAR(MAX)
)
INSERT INTO #1
VALUES ('DATETIME', '20150404 12:34:56.789'),
('DATE', '20150404'),
('INT', '20150404')
SELECT
*,
IIF(T1.DataType = 'DATETIME', CAST(T1.Data AS DATETIME), NULL) Col1,
IIF(T1.DataType = 'DATE', CAST(T1.Data AS DATE), NULL) Col2,
IIF(T1.DataType = 'INT', CAST(T1.Data AS INT), NULL) Col3,
IIF(T1.DataType = 'DECIMAL(14, 6)', CAST(T1.Data AS DECIMAL(14, 6)), NULL) Col4
FROM
#1 T1
и есть что-то вроде этого:
SELECT
*,
IIF(T1.DataType = 'DATETIME', CAST(T1.Data AS T1.DataType), NULL) Col1,
IIF(T1.DataType = 'DATE', CAST(T1.Data AS T1.DataType), NULL) Col2,
IIF(T1.DataType = 'INT', CAST(T1.Data AS T1.DataType), NULL) Col3,
IIF(T1.DataType = 'DECIMAL(14, 6)', CAST(T1.Data AS T1.DataType), NULL) Col4
FROM
#1 T1
Или даже то, что автоматически создает новый столбец для каждого типа данных. Реально это было бы нормализовано и имело бы таблицу DataType с идентификаторами первичного ключа, на которые нужно ссылаться.
Заранее благодарю за помощь всех.