Принять входной параметр, используя функцию в T-SQL - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть этот скрипт, который выполняется, но мне нужно, чтобы он принимал пользовательский ввод вместо установки переменной для @lastName.

CREATE FUNCTION displayCount() RETURNS INT
AS
BEGIN
    DECLARE @number INT, @lastName VARCHAR(40);
    SET @lastName = 'Ferrier';

    SELECT @number = COUNT(*) FROM Person.Person 
    WHERE LastName = @lastName;
    RETURN @number;
END   
GO

SELECT dbo.displayCount() AS howMany

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

'Процедура или функция dbo.diplayCount имеет слишком много аргументов'

Я уверен, что это что-то простое, и со мной так НОВОЕ, я не вижу этого. Спасибо за помощь !!

CREATE FUNCTION displayCount(@lastName VARCHAR(40)) RETURNS INT
AS
BEGIN
    DECLARE @number INT;   
    SELECT @number = COUNT(*) FROM Person.Person 
    WHERE LastName = @lastName;
    RETURN @number;
END   
GO

SELECT dbo.displayCount('Ferrier') as howMany

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

В SSMS разверните [ваша база данных]> Папка программируемости> Папка функций> Табличные функции> Щелкните правой кнопкой мыши> Новая встроенная табличная функция ....

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      
-- Create date: 
-- Description: 
-- =============================================
CREATE FUNCTION displayCount
(   
    @lastName   varchar(40)
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT COUNT(*) AS howMany
    FROM Person.Person 
    WHERE LastName = @lastName
)
GO

Тогда позвоните по номеру

SELECT howMany FROM dbo.displayCount('Ferrier')

0 голосов
/ 12 сентября 2018

Ваша функция выглядит так хорошо, но я думаю, вам нужно использовать ALTER вместо CREATE, потому что функция уже существует в БД.

вам нужно изменить, а не создавать.

ALTER FUNCTION displayCount(@lastName VARCHAR(40)) RETURNS INT
AS
BEGIN
    DECLARE @number INT;   
    SELECT @number = COUNT(*) FROM Person.Person 
    WHERE LastName = @lastName;
    RETURN @number;
END  

GO

SELECT dbo.displayCount('Ferrier') as howMany
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...