【发布时间】:2016-06-14 13:40:03
【问题描述】:
我在不同的数据库中有两个表,我试图将它们合并在一起以创建资产列表及其读数。我想出了以下查询:
use [db1]
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot
= stuff((select ','+quotename(C.name)
FROM sys.columns c
where c.object_id = OBJECT_ID('db1.dbo.RUNTIME') and c.name != 'timestamp'
for xml path('')), 1, 1, '')
use [db2]
set @query = '
SELECT
a.[ID],
a.[ASSETCLASS],
a.[ASSETID],
a.[READINGNAME],
CONVERT(nvarchar(max), a.[SCADA_TAG]) as [SCADA_TAG],
b.timestamp AS [READINGDATE],
b.scada_value AS [READING]
/*,[PROCESSED]*/ FROM [scada].[PREPROCESSING] a
LEFT JOIN (SELECT
[timestamp],
CONVERT(nvarchar(max), [SCADA_TAG]) as [SCADA_TAG],
[SCADA_VALUE]
FROM [db1].[dbo].[RUNTIME] UNPIVOT (SCADA_VALUE FOR SCADA_TAG IN ('+ @colsUnpivot +')) u) b
ON a.scada_tag = b.scada_tag'
exec sp_executesql @query;
但是,我在运行查询时收到以下错误消息:
当我查看所提到的列的数据类型时,db1 数据库对于我要选择的列有两种不同的数据类型——浮点数和整数。我试图将这些列名称从 db1 放入 db2 的列是数据类型 nvarchar(100)。我试过铸造并将 SCADA_TAG 转换为没有成功。我刚刚从另一个开发人员那里继承了这个 SQL 集成,我对枢轴和非枢轴功能感到生疏。任何帮助或建议将不胜感激。
【问题讨论】:
-
如果您对列中的所有行进行反透视 - 必须是相同的数据类型。
标签: sql sql-server dynamic-sql unpivot