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

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

0 ответов

Другие вопросы по тегам