使用函数获取SQL查询中的错误

Rah*_*hul 3 c# sql sql-server-2008-r2

当我通过C#适配器运行此查询时,它会导致错误:

使用附近的语法不正确

有任何想法吗?当我在SQL Server 2008 R2中运行它时它工作正常.

create FUNCTION [dbo].[fn_Split] (@sep nvarchar(10), @s nvarchar(4000))
RETURNS table
AS
  RETURN (
  WITH Pieces(pn, start, stop) AS (
  SELECT 1, 1, CHARINDEX(@sep, @s)
  UNION ALL
  SELECT pn + 1, stop + (datalength(@sep)/2), 
    CHARINDEX(@sep, @s, stop + (datalength(@sep)/2))
  FROM Pieces
  WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 4000 END) AS value
FROM Pieces
)
;

/****** Object: Table [dbo].[drillDowntable1] Script Date: 09/24/2012 18:43:32 ******/
USE [master]

SET ANSI_NULLS ON
;
SET QUOTED_IDENTIFIER ON
;
SET ANSI_PADDING ON
;
CREATE TABLE [dbo].[drillDowntable1](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](20) NULL,
[json] [varchar](max) NULL,
[isActive] [bit] NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

你需要GO把东西放在他们自己的批次中.

FROM Pieces
)
;

GO -- < this is important
/****** Object: Table [dbo].[drillDowntable1] Script Date: 09/24/2012 18:43:32 ******/
USE [master]
Run Code Online (Sandbox Code Playgroud)

  • @Rahul不,分号是*语句*终止符,而不是*batch*分隔符.像函数这样的模块需要在它们自己的*批处理*中. (2认同)
  • @Rahul您确定已将数据库上下文设置为正确的数据库吗?根据你所拥有的内容,如果您的数据库已经具有该功能*并且*副本中也存在副本,我将不会感到惊讶. (2认同)