2013-02-20 4 views
1

Я писал вспомогательный запрос в хранимой процедуре, чтобы получить значения между ордерами, хранящимися как varhar datatype. Когда я запускаю запрос, он показывает:Оператор BETWEEN в SQL Server

Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.

Я немного погуглил и нашел проблему из-за возврата более чем одного значения в подзапрос.

Но в моем случае мне нужны все значения, которые находятся между данным входом. Может кто-нибудь сказать мне, каким образом я могу добиться этого ..

Код:

SELECT ROW_NUMBER()OVER(
         ORDER BY po.id) AS SNo , 
     pd.Copies AS Quantity, 
     pd.EstUnitPrice AS UniPrice, 
     pd.Copies*pd.EstUnitPrice AS Total, 

    (SELECT value 
    FROM BibContents 
    WHERE bibid=pd.BibId 
    AND sfld='a' 
    AND tagno='245') AS Title, 

    (SELECT value 
    FROM BibContents 
    WHERE bibid=pd.BibId 
    AND sfld='a' 
    AND tagno='020') AS 'ISSN/ISBN', 

    (SELECT value 
    FROM BibContents 
    WHERE bibid=pd.BibId 
    AND sfld='a' 
    AND tagno='100')AS Author 
FROM [VibrantMas].[dbo].[PoDetails] AS pd 
     INNER JOIN Porders AS po ON po.Id=pd.PoId 
WHERE po.No BETWEEN '000021' AND '000024' 
+2

скажите, что, как насчет вашего формата TSQL приятно ... –

+0

Извините за неправильное форматирование запроса. – UniqueChar

ответ

2

Это не BETWEEN что бросает ошибку, но один из подзапросов на BibContents.

У вас есть два варианта

  • взять легкий маршрут и изменить каждый SELECT value с SELECT TOP 1 value
  • добраться до первопричины почему один из этих подзапросов возвращаются несколько записей.
    • Если он не должен возвращать несколько записей, вы должны добавить уникальное ограничение в BibContents, чтобы это не происходило в первую очередь.
    • Если для заданного может возникнуть несколько записей, вам необходимо решить, какой из них вы хотите вернуть.
    • Если вы хотите, чтобы все они вернулись, вам нужно будет изменить подзапросы на соответствующие соединения.

Мой совет должен был бы спасти себя от кошмара обслуживания и решить первопричину.

Разработка другой схемы для BibContents также не повредит. Похоже, вы приняли тему EAV model, с которой я думаю, это bad idea.

+0

@ Dhevy - Какое решение вы использовали? –

+0

Возврат одного результата из PoDetails. – UniqueChar

Смежные вопросы