!= TZ_XMXX_SBGNJXM.Count()报错
时间: 2023-03-28 12:03:33 浏览: 72
这个问题可能是关于编程的,我可以尝试回答。!= TZ_XMXX_SBGNJXM.Count()报错可能是因为TZ_XMXX_SBGNJXM这个对象没有定义或者没有被正确地引用。您可以检查一下代码中是否有拼写错误或者语法错误,或者确认一下这个对象是否被正确地初始化。
相关问题
用sql sever 写一个标量值函数 传参数 @TCJIDS varchar(100), @XMID int , 用到的表TZ_XMXX_SBGNJXM 字段 有XMID int ,YJBM varchar(8000),要求查询表TZ_XMXX_SBGNJXM 中YJBM 包含TCJIDS,注意YJBM和TCJIDS 可以多个用英文逗号分割,最后返回0或者1,0表示不存在1表示存在
以下是一个满足要求的 SQL Server 标量值函数:
```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;
IF CHARINDEX(@TCJIDS, @YJBM) > 0
BEGIN
SET @Result = 1;
END
RETURN @Result;
END
```
这个函数接受两个参数,@TCJIDS 和 @XMID,分别表示要查询的关键词和项目 ID。函数中使用了 SELECT 语句来查询表 TZ_XMXX_SBGNJXM 中对应项目的 YJBM 字段。然后使用 CHARINDEX 函数来检查 @TCJIDS 是否包含在 @YJBM 中,如果包含则设置 @Result 为 1,否则为 0。最后返回 @Result。注意,这里使用了 bit 类型来表示返回值,0 表示不存在,1 表示存在。
使用方法如下:
```sql
SELECT dbo.fn_check_yjbm_contains_tcjids('TCJIDS1,TCJIDS2', 1) AS Result;
```
其中第一个参数是要查询的关键词,多个关键词用英文逗号分割,第二个参数是项目 ID。函数将返回 0 或 1,表示是否存在对应的关键词。
这个代码有什么问题CREATE FUNCTION [dbo].[XM_GetCJL_QTDWMX] ( @XMID int ) RETURNS varchar(2000) AS BEGIN declare @res varchar(Max) select top 1 @res= case when ISNULL(a.QTDWFGLD,'')!='' or isnull(a.QTDWFGLDSJ,'')!='' then '联系领导(副处级以上):'+isnull(a.QTDWFGLD,'')+' '+isnull(a.QTDWFGLDSJ,'') +CHAR(10) else '' end + case when ISNULL(a.QTDWLXR,'')!='' or isnull(a.QTDWLXRSJ,'')!='' then '服务专员:'+isnull(a.QTDWLXR,'')+' '+isnull(a.QTDWLXRSJ,'') else '' end gnqyj from TZ_XMXX_CJL_QTDW a where XMID=1 return @res END
这段代码有几个问题:
1. 函数声明中的返回类型应为 `NVARCHAR(2000)`,而不是 `VARCHAR(2000)`。因为函数返回的字符串可能包含非 ASCII 字符,如中文字符,所以应该使用 Unicode 编码。
2. 函数声明中的 `@res` 变量没有指定长度,应该将其声明为 `NVARCHAR(MAX)`,以便能够容纳较长的字符串。
3. 在查询语句中,将 `from TZ_XMXX_CJL_QTDW a where XMID=1` 改为 `from TZ_XMXX_CJL_QTDW a where XMID=@XMID`,以便根据传入的参数 `@XMID` 进行查询。
修复后的代码如下所示:
```sql
CREATE FUNCTION [dbo].[XM_GetCJL_QTDWMX] (@XMID INT)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @res NVARCHAR(MAX)
SELECT TOP 1 @res =
CASE
WHEN ISNULL(a.QTDWFGLD, '') != '' OR ISNULL(a.QTDWFGLDSJ, '') != '' THEN '联系领导(副处级以上):' + ISNULL(a.QTDWFGLD, '') + ' ' + ISNULL(a.QTDWFGLDSJ, '') + CHAR(10)
ELSE ''
END +
CASE
WHEN ISNULL(a.QTDWLXR, '') != '' OR ISNULL(a.QTDWLXRSJ, '') != '' THEN '服务专员:' + ISNULL(a.QTDWLXR, '') + ' ' + ISNULL(a.QTDWLXRSJ, '')
ELSE ''
END
FROM TZ_XMXX_CJL_QTDW a
WHERE XMID = @XMID
RETURN @res
END
```
请注意,我假设你想根据传入的 `@XMID` 参数进行查询,所以将原始代码中的 `XMID=1` 改为 `XMID=@XMID`。如果你的意图是固定查询 `XMID` 为 1,那么可以忽略这个修改。