1
다음 코드는 독자적으로 필요로하는 코드와 동일합니다.UPDATE가 커서에 랩핑 될 때 SQL 오류가 발생했습니다.
UPDATE [MASKED_2014-06-30-2014-06-01-CUSTOMER325]
SET [MASKED_2014-06-30-2014-06-01-CUSTOMER325].[SELL PRICE] = ROUND
([Orbisrates].[dbo].[ORBIS_IMPORT_JUNE2014].[PEAKPERMINUTE]/60 *
[OrbisBilling].[dbo].[MASKED_2014-06-30-2014-06-01-CUSTOMER325].[CHARGEDTIMESECS] + [Orbisrates].[dbo].[ORBIS_IMPORT_JUNE2014].[PEAKCONNECT], 4)
FROM [OrbisRates].[dbo].[ORBIS_IMPORT_JUNE2014]
INNER JOIN
[OrbisBilling].[dbo].[MASKED_2014-06-30-2014-06-01-CUSTOMER325]
ON
[OrbisBilling].[dbo].[MASKED_2014-06-30-2014-06-01-CUSTOMER325].[TO]
LIKE
[ORBIS_IMPORT_JUNE2014].[DESTINATION] + '%'
WHERE
[OrbisBilling].[dbo].[MASKED_2014-06-30-2014-06-01-CUSTOMER325].[TARIFF LOOKUP]
= 'Orbis_Import_June2014'
문제점은 커서를 감쌀 때 오류가 발생한다는 것입니다.
나는 아래에 따라, 나는
메시지 102, 수준 15, 상태 1, 줄 13
를 얻을 수있는 편집없이 커서에 코드를 삽입하는 경우
근처의 구문이 잘못되었습니다 'Orbis_Import_June2014'
코드 :
DECLARE @tablevalue NVARCHAR(MAX), @sql NVARCHAR(MAX);
DECLARE table_value_cursor CURSOR FOR
SELECT DISTINCT [Tariff Lookup]
FROM [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325];
OPEN table_value_cursor
FETCH NEXT FROM table_value_cursor INTO @tablevalue
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = N'
UPDATE [masked_2014-06-30-2014-06-01-customer325]
SET [masked_2014-06-30-2014-06-01-customer325].[Sell Price] =
ROUND ([Orbisrates].[dbo].[Orbis_Import_June2014].[Peakperminute]/60*[OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325].[ChargedTimeSecs]+[Orbisrates].[dbo].[Orbis_Import_June2014].[Peakconnect],4)
FROM [OrbisRates].[dbo].[Orbis_Import_June2014]
INNER JOIN [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325] on [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325].[To] LIKE [Orbis_Import_June2014].[Destination]+'%'
WHERE [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325].[tariff lookup] = 'Orbis_Import_June2014'';
EXEC sp_executesql @sql;
FETCH NEXT FROM table_value_cursor INTO @tablevalue;
END
CLOSE table_value_cursor
DEALLOCATE table_value_cursor;
이 오류를 제거하려면, 내 WHERE 문에 따옴표의 몇 가지를 추가했다.
WHERE [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325].[tariff lookup] = ''Orbis_Import_June2014'''
그러나 지금은 데이터 유형이 NVARCHAR와 VARCHAR 모듈로 연산자에서 호환되지 않는
말, 코드이 오류를 실행할 때.
이전 게시물에서 조언 한 바에 따라 LIKE 성명을 추가 인용문에 넣었지만 아무 소용이 없습니다. 같은 오류
INNER JOIN [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325] on [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325].[To] LIKE ''[Orbis_Import_June2014].[Destination]+'%'''
도움을 주시면 감사하겠습니다.
또한 "+ '%" "에서"+ "'% '' '"까지 끝나는 ON 절을 변경해야합니다. –
흠! 그것은 읽기가 어렵습니다. 근본적으로, 와일드 카드 주위에 작은 따옴표를 다시 두 번 올리십시오. –
Pieter Geerkens가 옳다고 생각하는 구문 문제 이외에도 코드에서'@ tablevalue'를 사용하지 않으므로'UPDATE'는'CURSOR에있는 값만큼 많은 값에 대해 같은 방식으로 실행됩니다 '인구. 또한,'CURSOR'를 사용하는 것을 피하기 위해 최선을 다할 것입니다. 그러나'@ tablevalue'가 무엇을위한 것인지 명확해질 때까지 아무도 제안을 할 수 없습니다. – MarkD