アセットのリストとその読み取り値を作成するために、別々のデータベースに2つのテーブルがあります。クエリを実行するときに、私は次のエラーメッセージを受信していますが列の型がUNPIVOTリストに指定されている他の列の型と競合しています
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データベースには、select-floatとintをしようとしている列の2つの異なるデータ型があります。これらの列名をdb1からdb2に配置しようとしている列のデータ型はnvarchar(100)です。私はキャストし、SCADA_TAGを成功しないように変換しようとしました。私はちょうど別のdevからSQL統合を継承し、私はピボットとunpivotの機能に錆びています。どんな助けやアドバイスも大歓迎です。
列のすべての行をアンピボットする場合は、同じデータ型である必要があります。 – gofr1