T-SQL将列转换为动态数据类型

时间:2016-07-21 17:26:08

标签: sql-server tsql ssms-2014

我想将列转换为数据类型,该数据类型是另一列中的文本值。 我知道我可以使用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表,其中包含要引用的主键ID。

提前感谢大家的帮助。

0 个答案:

没有答案