存储过程从基于查询的查询中获取数据

时间:2016-10-28 07:41:56

标签: sql-server tsql set-based

你好我正在制作一个存储过程,我在输出带打印的代码时遇到问题,因为稍后我需要将变量写入临时数据库。 这是代码:

SELECT 
    fmsTotalAmount + fmsAirTotalAmount + fmsProjectsTotalAmount TotalAmount, 
    fmsRelationAmount + fmsAirRelationAmount + fmsProjectsRelationAmount TotalRelationAmount
    FROM (

        SELECT 
            SUM(
                CASE WHEN fms1.currency != 'EUR' 
                    THEN fms1.Amount * fms1.Rate
                    ELSE ISNULL(fms1.Amount, 0) END) fmsTotalAmount,
            SUM(
                CASE WHEN fms1.relationcode = 'SHIP02' 
                    THEN 
                        CASE WHEN fms1.currency != 'EUR' 
                            THEN fms1.Amount * fms1.Rate
                            ELSE ISNULL(fms1.Amount, 0) END
                    ELSE 0 END) fmsRelationAmount,
            SUM(
                CASE WHEN fmsAir1.currency != 'EUR' 
                    THEN fmsAir1.Amount * fmsAir1.Rate
                    ELSE ISNULL(fmsAir1.Amount, 0) END) fmsAirTotalAmount,
            SUM(
                CASE WHEN fmsProjects1.relationcode = 'SHIP02' 
                    THEN 
                        CASE WHEN fmsProjects1.currency != 'EUR' 
                            THEN fmsProjects1.Amount * fmsAir1.Rate
                            ELSE ISNULL(fmsProjects1.Amount, 0) END
                    ELSE 0 END) fmsAirRelationAmount,
            SUM(
                CASE WHEN fmsProjects1.currency != 'EUR' 
                    THEN fmsProjects1.Amount * fmsAir1.Rate
                    ELSE ISNULL(fmsProjects1.Amount, 0) END) fmsProjectsTotalAmount,
            SUM(
                CASE WHEN fmsProjects1.relationcode = 'SHIP02' 
                    THEN 
                        CASE WHEN fmsProjects1.currency != 'EUR' 
                            THEN fmsProjects1.Amount * fmsProjects1.Rate
                            ELSE ISNULL(fmsProjects1.Amount, 0) END
                    ELSE 0 END) fmsProjectsRelationAmount
        FROM   [fms].[dbo].[file] f
        LEFT JOIN [fms].[dbo].[outgoinginvoiceline] fms1 ON 
            fms1.filenumber = CONVERT(NVARCHAR, f.filenumber)
        LEFT JOIN [fmsAir].[dbo].[outgoinginvoiceline] fmsAir1 ON 
            fmsAir1.filenumber = CONVERT(NVARCHAR, f.filenumber)
        LEFT JOIN [fmsProjects].[dbo].[outgoinginvoiceline] fmsProjects1 ON 
            fmsProjects1.filenumber = CONVERT(NVARCHAR, f.filenumber)


) a

现在我要打印此SELECT语句的输出。但是当我这样做时:

  

打印'发票总额:' + CONVERT(nvarchar,fmsTotalAmount)+'€此关系'       打印'总发票金额:' + CONVERT(nvarchar,fmsTotalRelationAmount)+'€'

但后来我收到以下错误:

  

名称" fmsTotalAmount"在这种情况下是不允许的。有效   表达式是常量,常量表达式和(在某些情况下)   上下文)变量。不允许使用列名。

     

名称" fmsTotalRelationAmount"在这种情况下是不允许的。   有效表达式是常量,常量表达式和(在某些情况下)   上下文)变量。不允许使用列名。

在打印件上。如何将此值中的值变为变量?而不是将它作为一行返回。我需要变量。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望将SELECT的结果存储到表格中。

要实现这一点,您首先尝试将值写入变量,然后在第二步中尝试将这些变量插入到带有INSERT语句的表中。

最好尝试这种语法:

SELECT col1, col2, ... INTO #SomeTable FROM SomeWhere

INTO #SomeTable将自动创建一个带有拟合结构的临时表,并将完整的结果插入到这个新创建的临时表中。

简单的SELECT * FROM #SomeTable会带回结果。

答案 1 :(得分:0)

首先尝试声明printvariable并打印该值。

declare @ptext varchar(max)
select @ptext = 'Total money invoiced: ' + CONVERT(nvarchar, fmsTotalAmount) + '€ for this Relation' 
print @ptext
select @ptext = 'Total money invoiced: ' + CONVERT(nvarchar, fmsTotalRelationAmount) + '€ in total'
print @ptext