2014-07-06 1 views
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]+'%''' 

도움을 주시면 감사하겠습니다.

+0

또한 "+ '%" "에서"+ "'% '' '"까지 끝나는 ON 절을 변경해야합니다. –

+0

흠! 그것은 읽기가 어렵습니다. 근본적으로, 와일드 카드 주위에 작은 따옴표를 다시 두 번 올리십시오. –

+0

Pieter Geerkens가 옳다고 생각하는 구문 문제 이외에도 코드에서'@ tablevalue'를 사용하지 않으므로'UPDATE'는'CURSOR에있는 값만큼 많은 값에 대해 같은 방식으로 실행됩니다 '인구. 또한,'CURSOR'를 사용하는 것을 피하기 위해 최선을 다할 것입니다. 그러나'@ tablevalue'가 무엇을위한 것인지 명확해질 때까지 아무도 제안을 할 수 없습니다. – MarkD

답변

0

[요금 조회] 열의 데이터 형식이 NVarChar() 인 경우 조건의 값이 N이어야합니다.

WHERE [OrbisBilling].[dbo].[masked_2014-06-30-2014-06-01-customer325].[tariff lookup] = N''Orbis_Import_June2014''' 
관련 문제