我已经从类似的声明中修改了下面的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;
任何人都可以用正确的语法帮助我吗?
答案 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 +'''';