2014-12-06 7 views
0

У меня есть следующий SQL заявление:SQL Select с функцией

SELECT 
    RTRIM(LTRIM(REPLACE(LAGKART.VARENUMMER,CHAR(2),'')))     AS ItemNo, 
    RTRIM(LTRIM(REPLACE(LAGKART.SXSON,CHAR(2),'')))       AS Season, 
    ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT1,CHAR(2),''))),'')   AS Variant1, 
    ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT2,CHAR(2),''))),'')   AS Variant2, 
    (SELECT * 
    FROM [dbo].[B2BGetSpringFinal] (LAGKART.VARENUMMER, 
            LAGKART.VARIANT1, 
            LAGKART.VARIANT2 
           )) AS SpringAvailable 
FROM 
    LAGKART 

Но я получаю эту ошибку:

Msg 170, Level 15, State 1, Line 8
Неправильный синтаксис около ''.

Но если я вызываю функцию с фиксированными значениями:

SELECT 
    RTRIM(LTRIM(REPLACE(LAGKART.VARENUMMER,CHAR(2),'')))     AS ItemNo, 
    RTRIM(LTRIM(REPLACE(LAGKART.SXSON,CHAR(2),'')))       AS Season, 
    ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT1,CHAR(2),''))),'')   AS Variant1, 
    ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT2,CHAR(2),''))),'')   AS Variant2, 
    (SELECT * 
    FROM [dbo].[B2BGetSpringFinal] ('6261', 
            'Black', 
            'S' 
            )) AS SpringAvailable 
FROM 
    LAGKART 

я получить желаемый результат.

Любые идеи?

Br Мадс

+0

Какой диалект это? TSQL? он выглядит немного странным, но не достаточно для того, чтобы bt mysql. В общем, я уверен, что вы не можете потянуть столбцы результатов в такие подзапросы. Или возможно вы хотите CTE? – Jasen

+0

Это T-SQL Подумайте, что вы правы, что я не могу использовать столбцы результатов в подзапросах. – Dauer

ответ

0

в SQL Server 2000, только константы и @local_variables могут быть переданы в таблицу-ва lued функции. В SQL 2005 и выше это было исправлено. Вы можете попытаться использовать скалярную функцию для получения значения столбца SpringAvailable или посмотреть на обновление до более новой версии SQL Server.

+0

Я могу перейти с SQL 2000 на SQL Express 2005 бесплатно, так что это будет soloution. Спасибо! – Dauer

0

если ваш сервер поддерживает КТР вы могли бы попробовать это:

WITH a as (
SELECT VARENUMMER, 
RTRIM(LTRIM(REPLACE(LAGKART.VARENUMMER,CHAR(2),'')))     AS ItemNo, 
RTRIM(LTRIM(REPLACE(LAGKART.SXSON,CHAR(2),'')))       AS Season, 
ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT1,CHAR(2),''))),'')   AS Variant1, 
ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT2,CHAR(2),''))),'')   AS Variant2, 
FROM LAGKART 
) 
select *, 
(SELECT * FROM [dbo].[B2BGetSpringFinal] (a.VARENUMMER, 
              a.VARIANT1, 
              a.VARIANT2 
             ))        AS SpringAvailable 
from a ; 
+0

Спасибо Ясен. Попробуем позже и отчитаемся. – Dauer

+0

я получаю следующее сообщение об ошибке: Msg 156, уровень 15, состояние 1, строка 2 Неправильный синтаксис около ключевого слова «С» – Dauer

+0

Add ',' 'перед WITH' – gotqn

0

Вы можете использовать APPLY (CROSS или OUTER), чтобы передать значение столбца (ы) (ы) в качестве аргументов к функции:

SELECT RTRIM(LTRIM(REPLACE(LAGKART.VARENUMMER,CHAR(2),''))) AS ItemNo, 
     RTRIM(LTRIM(REPLACE(LAGKART.SXSON,CHAR(2),''))) AS Season, 
     ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT1,CHAR(2),''))),'') AS Variant1, 
     ISNULL(RTRIM(LTRIM(REPLACE(LAGKART.VARIANT2,CHAR(2),''))),'') AS Variant2, 
     SpringAvailable.* 
FROM LAGKART 
CROSS APPLY 
(
    SELECT * 
    FROM [dbo].[B2BGetSpringFinal] (LAGKART.VARENUMMER, LAGKART.VARIANT1,LAGKART.VARIANT2) 
) AS SpringAvailable 
+0

Thanks gtqn. Попробуем позже. – Dauer

+0

Я получаю следующее сообщение об ошибке: Msg 170, Level 15, State 1, Line 7 Строка 7: Неправильный синтаксис рядом с «APPLY». – Dauer

+0

Проверьте это http://stackoverflow.com/a/13922649/1080354 – gotqn

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