2014-06-24 44 views
0

我莫名其妙地坚持这一错误消息,我的痘痘查询中SQL唯一标识符是浮动

消息206,级别16,状态2不兼容的37行 操作数类型冲突:唯一标识符是浮动不兼容

我已经尝试设置uniqueidentifier的值是唯一标识符在他们的表中

或者将值设置为0以进一步确定问题,但我没有运气。

USE [master]; 

    if OBJECT_ID('tempdb.dbo.powerdeviation') is not null 
    BEGIN 
    DROP TABLE tempdb.dbo.powerdeviation 
    END 


    DECLARE @factor decimal = '1,5' /* delete VALUE in workflow */ 
    DECLARE @item nvarchar(256) = '450294' /*delete Value in workflow */ 
    DECLARE @item2 nvarchar(256) = '450295' /*delete Value in workflow */ 


    CREATE TABLE tempdb.dbo.powerdeviation(
    DeviceName nvarchar(256), 
    DeviceTypeName nvarchar(256), 
    TableID varchar(50), 
    SiteLocation varchar(50), 
    SiteName varchar(50), 
    DeviceID uniqueidentifier, 
    DeviceSerial nvarchar(256), 
    TableName nvarchar(256), 
    Factor decimal, 
    tPowerColumn varchar(50), 
    tPower float, 
    t2DeviceSerial varchar(50), 
    t2DeviceID float, 
    t2PowerColumn varchar(50), 
    t2Power float, 
    t2Powerdeviation float, 
    SitePower float, 
    SitePowerDeviation float, 
    typePower float, 
    typePowerDeviation float 
    ); 

    With cteTurbine1 as 
    ( SELECT D.Name as Devicename, DT.Name as Devicetypename, LD.ID as TableID, S.Location, S.Name AS LocationName, D.ID AS DeviceID, D.SerialNumber AS DeviceSerial, LD.Name AS TableName, LC.Name AS PowerColumn 
FROM CompMainConfig.dbo.DeviceType DT 
JOIN CompMainConfig.dbo.Device D ON DT.ID = D.DeviceTypeID 
JOIN CompMainConfig.dbo.LogTableDefinition LD ON LD.ID = DT.LogTableID 
JOIN CompMainConfig.dbo.Site S ON D.SiteID = S.ID 
JOIN CompMainConfig.dbo.LogColumnDefinition LC ON LC.TableID = DT.LogTableID 
JOIN CompMainConfig..Resource R ON LC.LocalizedNameID = R.ResourceID 
WHERE D.SerialNumber = (@item) and R.CultureName = 'en' and LC.MeasureFamily = '1' and LC.MeasureType = '1' and LC.OrdinalIndex = '0' 
    ), 
    cteTurbine2 as 
    ( SELECT D.Name as Devicename, DT.Name as Devicetypename, LD.ID as TableID, S.Location, S.Name AS LocationName, D.ID AS DeviceID, D.SerialNumber AS DeviceSerial, LD.Name AS TableName, LC.Name AS PowerColumn 
FROM CompMainConfig.dbo.Device D 
JOIN CompMainConfig.dbo.DeviceType DT ON D.DeviceTypeID = DT.ID 
JOIN CompMainConfig.dbo.LogTableDefinition LD ON LD.ID = DT.LogTableID 
JOIN CompMainConfig.dbo.Site S ON D.SiteID = S.ID 
JOIN CompMainConfig.dbo.LogColumnDefinition LC ON LC.TableID = DT.LogTableID 
JOIN CompMainConfig..Resource R ON LC.LocalizedNameID = R.ResourceID 
WHERE D.SerialNumber = (@item) and R.CultureName = 'en' and LC.MeasureFamily = '1' and LC.MeasureType = '1' and LC.OrdinalIndex = '0' 
    ) 

    INSERT INTO tempdb.dbo.powerdeviation 
    SELECT cteTurbine1.Devicename, cteTurbine1.Devicetypename, cteTurbine1.TableID,   cteTurbine1.Location, cteTurbine1.LocationName, cteTurbine1.DeviceID, cteTurbine1.DeviceSerial, cteTurbine1.TableName, @factor, cteTurbine1.PowerColumn,0, cteturbine2.DeviceSerial ,cteturbine2.DeviceID, cteTurbine2.PowerColumn, 0,0,0,0,0,0 
    FROM cteturbine1, cteturbine2 

回答

0

您可以执行下列操作之一:

选项1:在你的表定义,改变DEVICE_ID列 的DeviceID唯一标识符DEFAULT NEWID() 有了这个,你不必指定DEVICE_ID插入时的值。它将自动使用NEWID()函数并生成一个新的GUID。

选项2:在您的数据插入过程中,您可以像下面那样调用以获取Device_ID的新GUID。

INSERT INTO <table> VALUES (....., NEWID() as Device_ID....) 
+0

Option2正在工作,谢谢。 – veritaS