You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

String_Split函数能否在视图中使用?创建视图报对象名无效如何解决?

核心问题解答

string_split本身完全支持在视图中使用,你遇到的Invalid Object name 'string_split'报错基本是以下两个原因导致的:

  • 数据库兼容级别不足:string_split是SQL Server 2016版本新增的系统函数,要求对应数据库的兼容级别至少为130,如果兼容级别低于130,系统会无法识别该函数。
  • 视图定义存在语法问题:你当前的查询带了ORDER BY子句,直接封装为视图本身就会触发语法报错,只是优先抛出了函数找不到的错误。

第一步:确认并调整数据库兼容级别

执行以下查询查看当前数据库的兼容级别:

SELECT name, compatibility_level 
FROM sys.databases 
WHERE name = '你的数据库名';

如果查询结果的compatibility_level低于130,执行以下语句调整(需数据库管理员权限):

ALTER DATABASE 你的数据库名 
SET COMPATIBILITY_LEVEL = 130;

如果是更老的SQL Server版本(2014及以下)不支持兼容级别130,也可以手动创建自定义字符串拆分函数替代系统的string_split,文末会给出示例。


第二步:修改查询语句后创建视图

首先要去掉视图里的ORDER BY子句,视图作为虚拟表本身不存储排序规则,排序逻辑放在查询视图的时候添加即可。同时可以主动指定sys架构调用string_split避免架构识别问题,修改后的视图创建语句如下:

CREATE VIEW vw_split_ips AS
SELECT 
      DISTINCT [ColumnA]
      ,[ColumnB]
      ,cs.value as IPs
  FROM [table] as A
  CROSS APPLY sys.string_split( 
    REPLACE(
    REPLACE(
            REPLACE(
                REPLACE([value], '-', ',')
                , ';', ',')
            , '_', ',')
            , ' ', ',')
    , ',') cs
  WHERE A.[value] <> ''
  AND cs.value LIKE '%.%.%.%';

创建完成后你可以按需求排序查询结果:

SELECT * FROM vw_split_ips ORDER BY IPs;

低版本SQL Server兼容方案

如果你的SQL Server版本不支持系统的string_split,可以先创建以下自定义拆分函数:

CREATE FUNCTION dbo.Custom_String_Split
(
    @String NVARCHAR(MAX),
    @Delimiter CHAR(1)
)
RETURNS @Result TABLE (Value NVARCHAR(MAX))
AS
BEGIN
    DECLARE @Position INT
    WHILE CHARINDEX(@Delimiter, @String) > 0
    BEGIN
        SET @Position = CHARINDEX(@Delimiter, @String)
        INSERT INTO @Result (Value)
        SELECT SUBSTRING(@String, 1, @Position - 1)
        SET @String = SUBSTRING(@String, @Position + 1, LEN(@String) - @Position)
    END
    INSERT INTO @Result (Value)
    SELECT @String
    RETURN
END

然后把视图里的sys.string_split替换为dbo.Custom_String_Split即可正常使用。


内容的提问来源于stack exchange,提问作者SGP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:45:03