SQL Server创建函数,及参数的类型不确定该如何定义

SQL Server创建函数,网上看了好几篇文章,都写得比较复杂,下面写一个很简单的示例

    -- 创建GetValue函数
    CREATE FUNCTION GetValue (@input nvarchar)
    -- 定义返回值类型
    RETURNS nvarchar(max)
    AS
    BEGIN
            -- 定义返回值@result
        DECLARE @result nvarchar(max);

        -- 业务逻辑
        IF (1=1)
        BEGIN
            SET @result = '1'
        END


            -- 返回结果
        RETURN @result;
    END

这里再说一个示例,参数的类型不确定,该如何传参,定义,使用sql_variant关键字,SQL_VARIANT_PROPERTY进行类型判断

-- 创建GetValue函数
CREATE FUNCTION GetValue (@input sql_variant)
-- 定义返回值类型
RETURNS nvarchar(max)
AS
BEGIN
	-- 定义返回值@result
    DECLARE @result nvarchar(max);

    -- 业务逻辑
    IF SQL_VARIANT_PROPERTY(@input, 'BaseType') = 'nvarchar'
    BEGIN
        SET @result = 'String: ' + CAST(@input AS nvarchar);
    END

	
	-- 返回结果
    RETURN @result;
END

如果传出参数类型也是不固定的,那么传出参数也要定义为sql_variant,例如

-- 创建GetValue函数
CREATE FUNCTION GetValue (@input sql_variant)
-- 定义返回值类型
RETURNS sql_variant
AS
BEGIN
	-- 定义返回值@result
    DECLARE @result sql_variant;

    -- 业务逻辑
    IF SQL_VARIANT_PROPERTY(@input, 'BaseType') = 'nvarchar'
    BEGIN
        SET @result = @input;
    END
    ELSE IF SQL_VARIANT_PROPERTY(@input, 'BaseType') = 'int'
    BEGIN
        SET @result = 100;
    END
    ELSE
    BEGIN
        SET @result = NULL;
    END

    -- 返回结果
    RETURN @result;
END

下面,展示一个我自己创建,取值的例子

USE [UCMBiz43]
GO

/****** Object:  UserDefinedFunction [dbo].[GetValue]    Script Date: 2024/8/14 14:17:23 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[GetValue] (@input sql_variant)
RETURNS sql_variant
AS
BEGIN
    DECLARE @result sql_variant;
	
    IF SQL_VARIANT_PROPERTY(@input, 'BaseType') = 'nvarchar'
    BEGIN
	
        DECLARE @json NVARCHAR(MAX) = CAST(@input AS NVARCHAR(MAX));

        -- 判断是不是json
        IF ISJSON(@json) = 1
        BEGIN
            -- json是否包含 "value" and "label"
            IF JSON_VALUE(@json, '$.value') IS NOT NULL AND JSON_VALUE(@json, '$.label') IS NOT NULL
            BEGIN
                SET @result = JSON_VALUE(@json, '$.value');
                RETURN @result;
            END
        END

    END
    ELSE
    BEGIN
        SET @result = @input;
    END

    RETURN @result;
END
GO



posted @   亘古不变  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示