SQL游标中的Select语句出错

时间:2014-06-16 06:36:08

标签: sql sql-server syntax

我已经从类似的声明中修改了下面的SQL,但由于某种原因,这个版本不起作用。

它不断返回错误:

第15行,第1行,第3行 关键字“INNER”附近的语法不正确。 Msg 156,Level 15,State 1,Line 3 关键字“INNER”附近的语法不正确。

以下是代码:

DECLARE @tablevalue NVARCHAR(max), 
        @sql        NVARCHAR(max); 
DECLARE table_value_cursor CURSOR FOR 
  SELECT DISTINCT [tariff lookup] 
  FROM   [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325]; 

OPEN table_value_cursor 

FETCH next FROM table_value_cursor INTO @tablevalue 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      SELECT @sql = N'UPDATE [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325] SET [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[Sell Price] = ROUND ([Orbisrates].[dbo].' + @tablevalue 
                    + 
'.[Peakperminute]/60*[OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[ChargedTimeSecs]+[Orbisrates].[dbo].' 
       + @tablevalue 
       + 
'.[Peakconnect],4) INNER JOIN [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325] on [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[ChargeCode] = [Orbisrates].[dbo].' 
       + @tablevalue 
       + 
'.[Chargecode] WHERE [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[tariff lookup] = ''' 
       + @tablevalue + ''''; 

    EXEC Sp_executesql 
      @sql; 

    FETCH next FROM table_value_cursor INTO @tablevalue; 
END 

CLOSE table_value_cursor 

DEALLOCATE table_value_cursor; 

任何人都可以用正确的语法帮助我吗?

1 个答案:

答案 0 :(得分:0)

您在INNER JOIN之前错过了UPDATE语句中的FROM TABLE

声明应该是这样的:

SELECT @sql = N'UPDATE [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325] SET [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[Sell Price] =
ROUND ([Orbisrates].[dbo].'+ @tablevalue +'.[Peakperminute]/60*[OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[ChargedTimeSecs]+[Orbisrates].[dbo].'+ @tablevalue +'.[Peakconnect],4)
FROM [Orbisrates].[dbo].'+@tablevalue+' 
INNER JOIN [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325] on [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[ChargeCode] = [Orbisrates].[dbo].'+ @tablevalue +'.[Chargecode]
WHERE [OrbisBilling].[dbo].[masked_2014-05-31-2014-05-01-customer325].[tariff lookup] = '''+ @tablevalue +'''';