2016-10-28 4 views
1

Здравствуйте, я делаю хранимую процедуру, и у меня возникает проблема с выводом кода с печатью, потому что позже мне нужно записать переменные в базу данных temp. Это код:Сохраненная процедура получить данные из запроса 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 

Теперь я хочу, чтобы напечатать вывод этой ЗЕЬЕСТ. Но когда я это сделать:

print 'Total money invoiced: ' + CONVERT(nvarchar, fmsTotalAmount) + '€ for this Relation' print 'Total money invoiced: ' + CONVERT(nvarchar, fmsTotalRelationAmount) + '€ in total'

Но тогда я получаю следующее сообщение об ошибке:

The name "fmsTotalAmount" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.

The name "fmsTotalRelationAmount" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.

На отпечатках. Как получить значения из этой переменной? Вместо этого он возвращает его как строку. Мне нужны переменные.

+0

OT: [прочитать о * дурной привычке пинать *: объявление (N) VARCHAR без длины] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits- to-kick-declaring-varchar-without-length.aspx) – Shnugo

+0

Я не понимаю вашу цель: если вы просто ** читаете ** данные, почему вы создаете * хранимую процедуру * (что подразумевается ** для выполнения * * что нибудь)? Что случилось с рядом? Что лучше с * переменными * (особенно когда заголовок содержит * set-based *)? Пожалуйста, предоставьте более подробную информацию! – Shnugo

+0

Процедура больше, чем это. И он читает гораздо больше данных, чем только это. И затем он записывает его в базу данных –

ответ

2

Если я понимаю правильно, вы хотите сохранить результат SELECT в таблицу.

Для этого вы попытаетесь сначала записать значения в переменные, а затем - на втором шаге - попробуйте вставить эти переменные в таблицу с оператором INSERT.

Лучше было попробовать этот синтаксис:

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

INTO #SomeTable создаст временную таблицу с фитинга структурой автоматически и вставить полный результат в этом вновь созданную временную таблицу.

Простой SELECT * FROM #SomeTable принесет результат.

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