SQL选择带有功能

问题描述:

我有以下SQL语句:SQL选择带有功能

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 

但我得到这个错误:

消息170,级别15,状态1,行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 

我得到了想要的结果。

任何想法?

溴 的Mads

+0

这是什么方言? TSQL?它看起来有点怪异,但不够疯狂,以防止MySQL。我很确定你不能把结果列拉到子查询中,或者你想要一个CTE? – Jasen 2014-12-06 07:42:13

+0

这是T-SQL 认为你是对的,我不能在子查询中使用结果列。 – Dauer 2014-12-06 07:46:59

在SQL Server 2000中,只有常量和@local_variables可以传递到表-VA赋予功能。在SQL 2005及更高版本中,这是固定的。您可以尝试使用标量函数来获取SpringAvailable列值,或者查看升级到更新的SQL Server版本。

+0

我可以从SQL 2000免费升级到SQL Express 2005,所以这将是解决方案。 谢谢! – Dauer 2014-12-06 18:44:36

如果您的服务器支持热膨胀系数,你可以试试这个:

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 2014-12-06 07:51:35

+0

我收到以下错误: Msg 156,Level 15,State 1,Line 2 关键字'WITH'附近的语法不正确 – Dauer 2014-12-06 13:17:24

+0

'WITH'前加''' – gotqn 2014-12-06 13:36:57

您可以使用APPLYCROSSOUTER)通过列(S)值(S)作为参数到一个函数:

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

感谢gtqn。稍后再试一试。 – Dauer 2014-12-06 10:11:25

+0

我收到以下错误: 消息170,级别15,状态1,行7 行7:'APPLY'附近的语法不正确。 – Dauer 2014-12-06 13:15:14

+0

检查此http://*.com/a/13922649/1080354 – gotqn 2014-12-06 13:38:33