首页 新闻 赞助 找找看

SQL 存储过程问题

0
悬赏园豆:40 [已关闭问题] 关闭于 2015-03-31 17:22

/* C:\USERS\DELL\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\SEARCHBOOKSITE\SEARCHBOOKSITE\APP_DATA\BOOKSTROEDAT.MDF 的部署脚本

此代码由工具生成。 如果重新生成此代码,则对此文件的更改可能导致 不正确的行为并将丢失。 */

GO SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

SET NUMERIC_ROUNDABORT OFF;

GO :setvar DatabaseName "C:\USERS\DELL\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\SEARCHBOOKSITE\SEARCHBOOKSITE\APP_DATA\BOOKSTROEDAT.MDF" :setvar DefaultFilePrefix "C_\USERS\DELL\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\SEARCHBOOKSITE\SEARCHBOOKSITE\APP_DATA\BOOKSTROEDAT.MDF_" :setvar DefaultDataPath "C:\Users\Dell\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0\" :setvar DefaultLogPath "C:\Users\Dell\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0\"

GO :on error exit GO /* 请检测 SQLCMD 模式,如果不支持 SQLCMD 模式,请禁用脚本执行。 要在启用 SQLCMD 模式后重新启用脚本,请执行: SET NOEXEC OFF; */ :setvar __IsSqlCmdEnabled "True" GO IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'     BEGIN         PRINT N'要成功执行此脚本,必须启用 SQLCMD 模式。';         SET NOEXEC ON;     END

GO USE [$(DatabaseName)];

GO

IF (SELECT OBJECT_ID('tempdb..#tmpErrors')) IS NOT NULL DROP TABLE #tmpErrors GO CREATE TABLE #tmpErrors (Error int) GO SET XACT_ABORT ON GO SET TRANSACTION ISOLATION LEVEL READ COMMITTED GO BEGIN TRANSACTION GO PRINT N'正在改变 [dbo].[P_Test]...';

GO ALTER proc P_Test--创建存储过程P_Test

@pageSize int,--每页数据条数

@pageIndex int,--当前页数(页码)

@pageCount int output,--总的页数,因为需要显示页数,因此是个输出参数 @Key Nvarchar(100)

as

declare @datacount int--总数据条数

select @datacount=count(*) from [dbo].[Book]  where Book_Name Like' "%'+@Key+'%"' or Book_JianJie like '"%' + @Key +'%"' --获得总数据条数值并赋给参数

set @pageCount=ceiling(1.0*@datacount/@pageSize)--获得总页数,并赋给参数

--接下来是获得指定页数据 WITH CTE_Search AS (  SELECT *,ROW_NUMBER() OVER (ORDER BY Book_Time) AS RowID  FROM Book  WHERE Book_Name Like' "%'+@Key+'%"' or Book_JianJie like '"%' + @Key +'%"' ) SELECT * FROM CTE_Search where RowID between @pageSize*(@pageIndex-1)+1 and @pageSize*@pageIndex GO IF @@ERROR <> 0    AND @@TRANCOUNT > 0     BEGIN         ROLLBACK;     END

IF @@TRANCOUNT = 0     BEGIN         INSERT  INTO #tmpErrors (Error)         VALUES                 (1);         BEGIN TRANSACTION;     END

GO

IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION GO IF @@TRANCOUNT>0 BEGIN PRINT N'数据库更新的事务处理部分成功。' COMMIT TRANSACTION END ELSE PRINT N'数据库更新的事务处理部分失败。' GO DROP TABLE #tmpErrors GO PRINT N'更新完成。';

GO

提示如下错误:

正在改变 [dbo].[P_Test]... (76,1): SQL72014: .Net SqlClient Data Provider: 消息 319,级别 15,状态 1,过程 P_Test,第 19 行 Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon. (58,0): SQL72045: 脚本执行错误。执行的脚本: ALTER PROCEDURE P_Test @pageSize INT, @pageIndex INT, @pageCount INT OUTPUT, @Key NVARCHAR (100) AS DECLARE @datacount AS INT; SELECT @datacount = count(*) FROM   [dbo].[Book] WHERE  Book_Name LIKE ' "%' + @Key + '%"'        OR Book_JianJie LIKE '"%' + @Key + '%"'; SET @pageCount = ceiling(1.0 * @datacount / @pageSize); WITH   CTE_Search AS     (SELECT *,                ROW_NUMBER() OVER (ORDER BY Book_Time) AS RowID         FROM   Book         WHERE  Book_Name LIKE ' "%' + @Key + '%"'                OR Book_JianJie LIKE '"%' + @Key + '%"') SELECT * FROM   CTE_Search WHERE  RowID BETWEEN @pageSize * (@pageIndex - 1) + 1 AND @pageSize * @pageIndex;

执行批处理时出错。

 

请问大家怎么处理?

爬虫程序大魔王的主页 爬虫程序大魔王 | 初学一级 | 园豆:106
提问于:2015-03-30 12:46
< >
分享
所有回答(1)
0

改用其他方法。

爬虫程序大魔王 | 园豆:106 (初学一级) | 2015-03-31 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册