Как проверить функцию с табличным значением в SQL Server Management Studio?

Я никогда не работал с функциями базы данных, но мой текущий проект требует этого. Мне нужно поместить обычный sql-запрос в функцию, чтобы нам не приходилось вводить его в наш код сотни раз. У меня есть функция, но я не знаю, как ее использовать.

Вот код функции:

USE [DB_NAME]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[fn_GetConfigurationByProfile]
(
    @profileName AS NVARCHAR(50)
)
RETURNS TABLE
AS
RETURN
    (
    -- Fill the table variable with the rows for your result set
    SELECT  system_settings_groups.ssg_id, system_settings_groups.ssg_name,
            system_settings_groups.ssg_parent_group_id, system_settings_names.ssn_name, 
            system_Settings_names.ssn_display_name, system_settings_values.ssv_value
    FROM    system_settings_profiles
    JOIN    system_settings_values
    ON      system_settings_profiles.ssp_id = system_settings_values.ssv_ssp_id
    JOIN    system_settings_names
    ON      system_settings_names.ssn_id = system_settings_values.ssv_ssn_id
    JOIN    system_settings_groups
    ON      system_settings_groups.ssg_id = system_settings_names.ssn_ssg_id
    WHERE   system_settings_profiles.ssp_name = @profileName
    )

Итак, как мне использовать это в запросе sql? Я просто использую SELECT fn_GetConfigurationByProfile ('DEFAULTPROFILE')?

Это может быть любительский вопрос, ну да ладно. Мне нужна помощь :)


person Jeff    schedule 15.10.2009    source источник


Ответы (4)


вы хотите использовать FROM

E.g :

select ...

    FROM fn_GetConfigurationByProfile('DEFAULTPROFILE')

Пользовательские функции SQL Server

person anishMarokey    schedule 15.10.2009
comment
Спасибо за своевременный ответ. Я чувствую себя полным нубом, которого не следует об этом думать, поскольку это была функция с табличным значением: / - person Jeff; 15.10.2009

попробуй это

SELECT * FROM dbo.fn_GetConfigurationByProfile('DEFAULTPROFILE')
person devio    schedule 15.10.2009

Вы используете его в предложении FROM, например:

SELECT ....
FROM dbo.fn_GetConfigurationByProfile('DEFAULTPROFILE')

Вы также можете присоединить его к таблицам или, помимо прочего, использовать предложение where против него.

person MartW    schedule 15.10.2009

Другие показали, как можно вызвать функцию таблицы в стандартном запросе. Однако могу ли я предположить, что вы можете предпочесть создание представления, а не функции?

CREATE VIEW [dbo].[ConfigurationView] AS
SELECT  
    system_settings_profiles.ssp_name,
    system_settings_groups.ssg_id,
    system_settings_groups.ssg_name,
    system_settings_groups.ssg_parent_group_id,
    system_settings_names.ssn_name, 
    system_Settings_names.ssn_display_name,
    system_settings_values.ssv_value
FROM    system_settings_profiles
JOIN    system_settings_values
ON      system_settings_profiles.ssp_id = system_settings_values.ssv_ssp_id
JOIN    system_settings_names
ON      system_settings_names.ssn_id = system_settings_values.ssv_ssn_id
JOIN    system_settings_groups
ON      system_settings_groups.ssg_id = system_settings_names.ssn_ssg_id

GO

Затем вы можете использовать его в своем SQL следующим образом.

SELECT
    *
FROM
    ConfigurationView
WHERE
    ConfigurationView.ssp_name = 'DEFAULTPROFILE'

У вас будут добавленные параметры индексации представления, а также простой фильтрации других данных, если они вам потребуются.

person Robin Day    schedule 15.10.2009