2012-09-27 41 views
3

當我通過C#適配器運行此查詢它導致一個錯誤:得到錯誤的SQL查詢與功能使用

Incorrect syntax near Use

任何想法?當我在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] 

回答

5

你需要一個GO把東西放在他們自己的批次中。

FROM Pieces 
) 
; 

GO -- < this is important 
/****** Object: Table [dbo].[drillDowntable1] Script Date: 09/24/2012 18:43:32 ******/ 
USE [master] 
+0

我也做這個但是經過這一點,但它給我的錯誤不正確的語法附近去 – Rahul

+1

@Rahul好,我不知道C#適配器您正在使用運行此腳本,但如果不理解GO批次分隔符,您可能需要查看其文檔以瞭解如何正確終止批次。您可能需要將每個對象作爲自己的批次提交。 –

+0

@Rahul - 如果你從一塊C#運行它,那麼你不能使用'GO' - 但是你可能仍然需要拆分查詢,在你會*使用'GO'的地方,然後運行每一個依次作爲一個單獨的批次。 –