用sql sever 写一个标量值函数 传参数 @TCJIDS varchar(100), @XMID int , 用到的表TZ_XMXX_SBGNJXM 字段 有XMID int ,YJBM varchar(8000),要求查询表TZ_XMXX_SBGNJXM 中YJBM 包含TCJIDS,中YJBM 中的数据和TCJIDS的数据可能顺序不一致,要把TCJIDS逗号分割后再判断,注意YJBM和TCJIDS 可以多个用英文逗号分割,最后返回0或者1,0表示不存在1表示存在
时间: 2024-03-13 17:42:20 浏览: 55
SQL_Sever数据库常用语句大全.zip
5星 · 资源好评率100%
以下是一个满足要求的 SQL Server 标量值函数,相对于之前的版本,这个版本可以处理 TCJIDS 和 YJBM 中的数据顺序不一致的情况:
```sql
CREATE FUNCTION dbo.fn_check_yjbm_contains_tcjids(@TCJIDS varchar(100), @XMID int)
RETURNS bit
AS
BEGIN
DECLARE @Result bit = 0;
DECLARE @YJBM varchar(8000);
SELECT @YJBM = YJBM
FROM TZ_XMXX_SBGNJXM
WHERE XMID = @XMID;
DECLARE @TCJIDSTable TABLE (TCJID varchar(100));
DECLARE @YJBMTable TABLE (YJBM varchar(8000));
INSERT INTO @TCJIDSTable (TCJID)
SELECT value FROM STRING_SPLIT(@TCJIDS, ',');
INSERT INTO @YJBMTable (YJBM)
SELECT value FROM STRING_SPLIT(@YJBM, ',');
IF (SELECT COUNT(*) FROM @TCJIDSTable) = (SELECT COUNT(*) FROM @YJBMTable WHERE YJBM IN (SELECT TCJID FROM @TCJIDSTable))
BEGIN
SET @Result = 1;
END
RETURN @Result;
END
```
这个版本中使用了两个表变量 @TCJIDSTable 和 @YJBMTable,分别用于保存 TCJIDS 和 YJBM 中的关键词。使用 STRING_SPLIT 函数将 TCJIDS 和 YJBM 字符串分割成多个关键词,并插入到对应的表变量中。然后使用嵌套的 SELECT 语句来查询是否存在对应关键词,如果 @TCJIDSTable 中的关键词都包含在 @YJBMTable 中,就设置 @Result 为 1。
使用方法与之前的版本相同,只需要将函数名替换为新版本的函数名即可:
```sql
SELECT dbo.fn_check_yjbm_contains_tcjids('TCJIDS1,TCJIDS2', 1) AS Result;
```
其中第一个参数是要查询的关键词,多个关键词用英文逗号分割,第二个参数是项目 ID。函数将返回 0 或 1,表示是否存在对应的关键词。
阅读全文