Использовать столбец из временной таблицы, который заполняется хранимым процессом

Я знаю, что это неправильно и не сработает, но вот идея того, что я пытаюсь сделать.

Я хотел бы просто присоединиться к таблице, которую sp [GetFinalCountByGroupId] использует для внутреннего использования, но я не хочу, потому что таблица, которую она использует, имеет некоторые большие данные varbinary. Конечно, sp все еще запрашивает его, так что, возможно, он так же хорош с точки зрения производительности, как и соединение, а не вызов sp. В любом случае мне любопытно, смогу ли я сначала заставить это работать - если нет, я просто попробую объединиться. Во всяком случае, вот некоторый код:

CREATE PROCEDURE [dbo].[GetFinalRequests]
AS
BEGIN
SET NOCOUNT ON
DECLARE @FinalTable TABLE
(
  FinalCount TINYINT
)
INSERT INTO @FinalTable
EXEC [dbo].[GetFinalCountByGroupId] [GroupId]

SELECT [Id]
      ,[GroupId]
      ,[SubmitBy]
      ,[InUse]
  FROM [dbo].[Requests]
  WHERE [InUse] = 1
  AND @FinalTable.FinalCount > 0
END

edit: вот результат выполнения этого...Должен объявить скалярную переменную "@FinalTable".

2 ответа

Решение

У вас есть синтаксическая ошибка здесь:

SELECT [Id]
      ,[GroupId]
      ,[SubmitBy]
      ,[InUse]
FROM [dbo].[Requests]
WHERE [InUse] = 1
  AND @FinalTable.FinalCount > 0

Вы не можете получить доступ FinalCount столбец, как это в SQL, Я не знаю назначение временной таблицы, но просто чтобы она работала:

SELECT [Id]
      ,[GroupId]
      ,[SubmitBy]
      ,[InUse]
FROM [dbo].[Requests]
WHERE [InUse] = 1
  AND (select sum(FinalCount) from @FinalTable) > 0

Хорошо - я отказался от этого и только что сделал соединение:

SELECT [Id]
      ,r.[GroupId]
      ,[SubmitBy]
      ,[InUse]
FROM [dbo].[Requests] r
JOIN [dbo].[AgreementDocuments] d
  ON r.[GroupId] = d.[GroupId]
WHERE r.[InUse] = 1
AND d.[Final] = 1
Другие вопросы по тегам