Приведение столбца 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 с идентификаторами первичного ключа, на которые нужно ссылаться.

Заранее благодарим всех за помощь.


person user2921429    schedule 21.07.2016    source источник
comment
Возможный дубликат приведения типа данных с переменной   -  person NEER    schedule 21.07.2016
comment
Я хочу знать, есть ли способ не помещать мой оператор SQL в текстовую переменную и не выполнять его. Кроме того, я хочу иметь таблицу с 3 столбцами: PK-Id, FK-DataTypeId, Data. это сделает так, чтобы я мог хранить одно и то же значение в данных, но использовать его как другой тип данных в зависимости от значения fkDataTypeId   -  person user2921429    schedule 21.07.2016
comment
В своем последнем комментарии вы говорите, что хотите разные типы данных в одном столбце?   -  person HoneyBadger    schedule 22.07.2016
comment
нет, мне нужен отдельный столбец для каждого типа данных в финальном запросе. В таблице все будет сохранено как VARCHAR(MAX), и каждая запись будет иметь VARCHAR(20) с именем того типа данных, который должен быть. Спасибо!   -  person user2921429    schedule 25.07.2016