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
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现