我想将列转换为数据类型,该数据类型是另一列中的文本值。
我知道我可以使用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。
提前感谢大家的帮助。