2013-05-01 51 views
0

我在MSSQL下面的SQL語句2008年SQL - 使用與條款,收到錯誤

use gasnominations 

INSERT INTO dbo.GasData (readDate,TagName,Value, amendedValue) 

with emptce as 
(SELECT timestamp AS Interval, Left(Right(TagName,Len(TagName)-5),Len(TagName)-10) as TagName, 
CONVERT(decimal(10, 3), ROUND(value, 3)) As Value 
FROM 
    OPENQUERY(IHISTORIAN,' 
       SET starttime =''yesterday +6h'', endtime =''today +6h'' 
       SELECT timestamp, tagname, value 
       FROM ihRawData 
       WHERE tagname = "UMIS.99FC9051.F_CV" 
        OR tagname = "UMIS.99F851C.F_CV" 
        OR tagname = "UMIS.35GTGAS.F_CV" 
        OR tagname = "UMIS.35HRSGGAS.F_CV" 
     OR tagname = "UMIS.99XXG546.F_CV" 
     OR tagname = "UMIS.99XXG547.F_CV" 
     OR tagname = "UMIS.99F9082.F_CV" 
     OR tagname = "UMIS.99FC20107.F_CV" 
     OR tagname = "UMIS.95FIQ5043.F_CV" 
     OR tagname = "UMIS.99PBGAS.F_CV" 
     OR tagname = "UMIS.99FE1100.F_CV" 
     OR tagname = "UMIS.99FE1200.F_CV" 
     OR tagname = "UMIS.99FC8279.F_CV" 
     OR tagname = "UMIS.35FI8316.F_CV" 
       AND timestamp BETWEEN ''timestamp'' and ''timestamp'' 
       AND SamplingMode =Calculated 
       AND CalculationMode =Average 
       AND IntervalMilliseconds =1h 
       ORDER BY tagname, timestamp')) 
       select emptce.Interval, emptce.TagName, emptce.Value, gasdata.amendedValue from emptce inner join gasdata on emptce.TagName = gasData.tagName COLLATE DATABASE_DEFAULT 
and emptce.Interval = DATEADD(DAY, 1, readDate) 

我收到以下錯誤:「如果這種說法是公用表表達式,一個XMLNAMESPACES子句或改變跟蹤上下文子句,前面的語句必須以分號結尾。'

我已經嘗試添加一個分號前,但它只是然後錯誤;

+1

你剛纔是不是在用之前添加分號?所以它變成了;與? – 03Usr 2013-05-01 07:57:49

+0

您需要使用分號';'來終止*每個*語句(不要在'with'語句前添加* terminate *字符)。看到這裏:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/09/03/ladies-and-gentlemen-start-your-semi-colons.aspx – 2013-05-01 08:00:09

+0

03Usr - 是的,我也試過後插入語句。仍然沒有工作 – Silentbob 2013-05-01 08:01:55

回答

-1

試試這個

with emptce as 
(SELECT timestamp AS Interval, Left(Right(TagName,Len(TagName)-5),Len(TagName)-10) as TagName, 
CONVERT(decimal(10, 3), ROUND(value, 3)) As Value 
FROM 
    OPENQUERY(IHISTORIAN,' 
       SET starttime =''yesterday +6h'', endtime =''today +6h'' 
       SELECT timestamp, tagname, value 
       FROM ihRawData 
       WHERE tagname = "UMIS.99FC9051.F_CV" 
        OR tagname = "UMIS.99F851C.F_CV" 
        OR tagname = "UMIS.35GTGAS.F_CV" 
        OR tagname = "UMIS.35HRSGGAS.F_CV" 
     OR tagname = "UMIS.99XXG546.F_CV" 
     OR tagname = "UMIS.99XXG547.F_CV" 
     OR tagname = "UMIS.99F9082.F_CV" 
     OR tagname = "UMIS.99FC20107.F_CV" 
     OR tagname = "UMIS.95FIQ5043.F_CV" 
     OR tagname = "UMIS.99PBGAS.F_CV" 
     OR tagname = "UMIS.99FE1100.F_CV" 
     OR tagname = "UMIS.99FE1200.F_CV" 
     OR tagname = "UMIS.99FC8279.F_CV" 
     OR tagname = "UMIS.35FI8316.F_CV" 
       AND timestamp BETWEEN ''timestamp'' and ''timestamp'' 
       AND SamplingMode =Calculated 
       AND CalculationMode =Average 
       AND IntervalMilliseconds =1h 
       ORDER BY tagname, timestamp')) 
       INSERT INTO dbo.GasData (readDate,TagName,Value, amendedValue) 
       select emptce.Interval, emptce.TagName, emptce.Value, gasdata.amendedValue     
       from emptce inner join gasdata on emptce.TagName = gasData.tagName COLLATE DATABASE_DEFAULT 
and emptce.Interval = DATEADD(DAY, 1, readDate) 
+0

真棒,謝謝 – Silentbob 2013-05-01 08:35:52

0

你會發現使用語句需要使用多個語句時

use gasnominations 
GO 

INSERT INTO dbo.GasData (readDate,TagName,Value, amendedValue); 

WITH .... 
+0

謝謝,但我仍然得到不正確的語法靠近';'修正值後) – Silentbob 2013-05-01 08:18:24

1

終止與分號之前的語句,然後提前INSERT使用WITH跟着一個GO。

use gasnominations; 

with emptce as (...) 
INSERT INTO dbo.GasData (readDate,TagName,Value, amendedValue) 
select emptce.Interval, emptce.TagName, emptce.Value, gasdata.amendedValue from emptce inner join gasdata on emptce.TagName = gasData.tagName COLLATE DATABASE_DEFAULT 
and emptce.Interval = DATEADD(DAY, 1, readDate)