Можем ли мы вызвать функцию внутри функции SQL Server 2005 - PullRequest
5 голосов
/ 30 июля 2011
ALTER function [dbo].[getEmployeeID](@ID int) returns table
as  
  begin
  return (
    select * from [dbo].[gtEmployeeName](2)
    select * from Employees where EmployeeID = @ID)
end

здесь [dbo].[gtEmployeeName] - это другая функция, которую я пытаюсь вызвать.

Я получаю сообщение об ошибке, мы можем вызвать его или есть какая-то проблема с синтаксисом?

Сообщение 156, Уровень 15, Состояние 1, Процедура getEmployeeID, Строка 6
Неверный синтаксис рядом с ключевым словом «выбрать».
Сообщение 102, Уровень 15, Состояние 1, Процедура getEmployeeID, Строка 6
Неверный синтаксисоколо ')'.

Спасибо, принц

Ответы [ 2 ]

6 голосов
/ 30 июля 2011

Если [dbo].[gtEmployeeName] возвращает скаляр, который вы, вероятно, ищете

ALTER function [dbo].[getEmployeeID](@ID int) returns table
as  
begin
return (
    select *, [dbo].[gtEmployeeName](2) as EmpName from Employees where EmployeeID=@ID)
end

Если [dbo].[gtEmployeeName] возвращает таблицу, которую вы, вероятно, ищете

ALTER function [dbo].[getEmployeeID](@ID int) returns table
as  
begin
return (
    select * from [dbo].[gtEmployeeName](2) EN
    inner join Employees E on EN.EmployeeID = E.EmployeeID
    where EmployeeID=@ID)
end

Обновите соединение до внешнего, если это то, что вам нужно. Также обновите join condition (в примере предполагается, что возвращенная таблица из gtEmployeeName имеет столбец EmployeeID и может использоваться для присоединения к Сотрудникам.

3 голосов
/ 30 июля 2011

Да, вы можете вызывать функцию внутри функции.

Фактически, вы можете вызывать текущую функцию внутри функции, чтобы вызвать цикл.

Какую ошибку вы получаете?Ваша ошибка, скорее всего, связана с чем-то другим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...