murkalkiran Ответов: 1

Что не так в приведенном ниже SQL-запросе


SELECT * 
	FROM   ratecard ratecard INNER JOIN RateCardStagingTable UPDATEDATA  ON ratecard.ratetableid = @RateTableID
			WHERE  (  ratecard.ratecategoryid1 = UPDATEDATA.ratecategoryid1 OR (  ratecard.ratecategoryid1 IS NULL AND UPDATEDATA.ratecategoryid1 IS NULL ) ) 
               AND ( ratecard.ratecategoryid2 = UPDATEDATA.ratecategoryid2 OR ( ratecard.ratecategoryid2 IS NULL AND UPDATEDATA.ratecategoryid2 IS NULL ) ) 
               AND ( ratecard.ratecategoryid3 = UPDATEDATA.ratecategoryid3 OR ( ratecard.ratecategoryid3 IS NULL AND UPDATEDATA.ratecategoryid3 IS NULL ) ) 
               AND ( ratecard.ratecategoryid4 = UPDATEDATA.ratecategoryid4 OR ( ratecard.ratecategoryid4 IS NULL AND UPDATEDATA.ratecategoryid4 IS NULL ) ) 
               AND ( ratecard.ratecategoryid5 = UPDATEDATA.ratecategoryid5 OR ( ratecard.ratecategoryid5 IS NULL AND UPDATEDATA.ratecategoryid5 IS NULL ) ) 
               AND ( ratecard.ratecategoryid6 = UPDATEDATA.ratecategoryid6 OR ( ratecard.ratecategoryid6 IS NULL AND UPDATEDATA.ratecategoryid6 IS NULL ) ) 
               AND ( ratecard.ratecategoryid7 = UPDATEDATA.ratecategoryid7 OR ( ratecard.ratecategoryid7 IS NULL AND UPDATEDATA.ratecategoryid7 IS NULL ) ) 
               AND ( ratecard.ratecategoryid8 = UPDATEDATA.ratecategoryid8 OR ( ratecard.ratecategoryid8 IS NULL AND UPDATEDATA.ratecategoryid8 IS NULL ) ) 
               AND ( ratecard.ratecategoryid9 = UPDATEDATA.ratecategoryid9 OR ( ratecard.ratecategoryid9 IS NULL AND UPDATEDATA.ratecategoryid9 IS NULL ) ) 
               AND ( ratecard.ratecategoryid10 = UPDATEDATA.ratecategoryid10 OR ( ratecard.ratecategoryid10 IS NULL  AND UPDATEDATA.ratecategoryid10 IS NULL ) )
		GROUP BY UPDATEDATA.ID , UPDATEDATA.RateCategoryID1,UPDATEDATA.RateCategoryID2,UPDATEDATA.RateCategoryID3,UPDATEDATA.RateCategoryID4,UPDATEDATA.RateCategoryID5,UPDATEDATA.RateCategoryID6,UPDATEDATA.RateCategoryID7,UPDATEDATA.RateCategoryID8,UPDATEDATA.RateCategoryID9,UPDATEDATA.RateCategoryID10,UPDATEDATA.low,UPDATEDATA.target,UPDATEDATA.high,UPDATEDATA.CustomFields,UPDATEDATA.DataPointsCount


			
			SELECT * FROM
			( RateCardStagingTable DI  LEFT JOIN(
		SELECT UPDATEDATA.ID , UPDATEDATA.RateCategoryID1,UPDATEDATA.RateCategoryID2,UPDATEDATA.RateCategoryID3,UPDATEDATA.RateCategoryID4,UPDATEDATA.RateCategoryID5,UPDATEDATA.RateCategoryID6,UPDATEDATA.RateCategoryID7,UPDATEDATA.RateCategoryID8,UPDATEDATA.RateCategoryID9,UPDATEDATA.RateCategoryID10,UPDATEDATA.low,UPDATEDATA.target,UPDATEDATA.high,UPDATEDATA.CustomFields,UPDATEDATA.DataPointsCount
	FROM   ratecard ratecard INNER JOIN RateCardStagingTable UPDATEDATA  ON ratecard.ratetableid = @RateTableID
			WHERE  (  ratecard.ratecategoryid1 = UPDATEDATA.ratecategoryid1 OR (  ratecard.ratecategoryid1 IS NULL AND UPDATEDATA.ratecategoryid1 IS NULL ) ) 
               AND ( ratecard.ratecategoryid2 = UPDATEDATA.ratecategoryid2 OR ( ratecard.ratecategoryid2 IS NULL AND UPDATEDATA.ratecategoryid2 IS NULL ) ) 
               AND ( ratecard.ratecategoryid3 = UPDATEDATA.ratecategoryid3 OR ( ratecard.ratecategoryid3 IS NULL AND UPDATEDATA.ratecategoryid3 IS NULL ) ) 
               AND ( ratecard.ratecategoryid4 = UPDATEDATA.ratecategoryid4 OR ( ratecard.ratecategoryid4 IS NULL AND UPDATEDATA.ratecategoryid4 IS NULL ) ) 
               AND ( ratecard.ratecategoryid5 = UPDATEDATA.ratecategoryid5 OR ( ratecard.ratecategoryid5 IS NULL AND UPDATEDATA.ratecategoryid5 IS NULL ) ) 
               AND ( ratecard.ratecategoryid6 = UPDATEDATA.ratecategoryid6 OR ( ratecard.ratecategoryid6 IS NULL AND UPDATEDATA.ratecategoryid6 IS NULL ) ) 
               AND ( ratecard.ratecategoryid7 = UPDATEDATA.ratecategoryid7 OR ( ratecard.ratecategoryid7 IS NULL AND UPDATEDATA.ratecategoryid7 IS NULL ) ) 
               AND ( ratecard.ratecategoryid8 = UPDATEDATA.ratecategoryid8 OR ( ratecard.ratecategoryid8 IS NULL AND UPDATEDATA.ratecategoryid8 IS NULL ) ) 
               AND ( ratecard.ratecategoryid9 = UPDATEDATA.ratecategoryid9 OR ( ratecard.ratecategoryid9 IS NULL AND UPDATEDATA.ratecategoryid9 IS NULL ) ) 
               AND ( ratecard.ratecategoryid10 = UPDATEDATA.ratecategoryid10 OR ( ratecard.ratecategoryid10 IS NULL  AND UPDATEDATA.ratecategoryid10 IS NULL ) )
		GROUP BY UPDATEDATA.ID , UPDATEDATA.RateCategoryID1,UPDATEDATA.RateCategoryID2,UPDATEDATA.RateCategoryID3,UPDATEDATA.RateCategoryID4,UPDATEDATA.RateCategoryID5,UPDATEDATA.RateCategoryID6,UPDATEDATA.RateCategoryID7,UPDATEDATA.RateCategoryID8,UPDATEDATA.RateCategoryID9,UPDATEDATA.RateCategoryID10,UPDATEDATA.low,UPDATEDATA.target,UPDATEDATA.high,UPDATEDATA.CustomFields,UPDATEDATA.DataPointsCount )UD ON DI.id=UD.id)-- WHERE  UD.id IS NULL
	
SET @UpdatedRecords=Case WHEN @UpdatedRecords IS NULL THEN 0 ELSE @UpdatedRecords END
SET @InsertedCount= Case WHEN @InsertedCount IS NULL THEN 0 ELSE @InsertedCount END

	
	SET @UpdateRecordsnumber =@UpdatedRecords
	SET  @InsertedRecordsNumber =@InsertedCount


Я получаю эту ошибку, я не могу понять, в чем проблема

ниже приведена ошибка

Msg 305, Level 16, State 1, Procedure GetImportRateTableDetails, Line 233
The XML data type cannot be compared or sorted, except when using the IS NULL operator.
Msg 305, Level 16, State 1, Procedure GetImportRateTableDetails, Line 251
The XML data type cannot be compared or sorted, except when using the IS NULL operator.


Что я уже пробовал:

Что не так я делаю в этом запросе

PIEBALDconsult

Выясните, какие значения являются XML.

Alex M.H.

Я не думаю, что есть проблема с SQL-оператором. Я предполагаю, что это происходит при разборе доставленных элементов данных или при отображении структуры таблицы. Какой язык вы используете? Что такое "GetImportRateTableDetails"?

1 Ответов

Рейтинг:
1

Rocker-Star

Я столкнулся с такой проблемой при добавлении полей xml-данных в предложение group by.
Конечно,я не рекомендую использовать xml-поля в предложении group by.
Как мне преодолеть это путем преобразования XML-поля на varchar, что позволял SQL для сортировки.
Попробуйте выполнить следующее преобразование столбца xml в поле GroupBy следующим образом CONVERT (VARCHAR (max), xml_data_field_name).