关于存储过程的问题求教,想了很久未果

wfy1591580 2011-03-16 11:16:13
VB6+SQL2008

我写了一个存储过程,

但是遇到这样的问题:

第一:必须这样才能执行,




第三个参数cx_str 形式是我不能理解的,但是我试了很多次,只能这样运行。

我认为应该是写成'"& cx_str &"'这样就差不多了,但是不对。在存储过程里,该参数为varchar(3000)

第二:现在如果cx_str这个参数的内容过长,就会出现如下报错:



这个错误我搜索了下,说是把双引号改成2个单引,但是我的存储过程里,全部用参数实现,该怎么写呢,希望各位指点。
...全文
112 点赞 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wfy1591580 2011-03-16
[Quote=引用 9 楼 wxf163 的回复:]
去你的查询分析器 单独执行你的存储过程

也许是你程序定义的字符串太短呢。。
[/Quote]

对了,忘记这样说了,我尝试过在程序中跟踪,然后单独在查询分析器执行,同样的参数,但是不报这个错误,应该是带入格式的问题,但是就是不知道这个格式要如何写。。期待指点
回复
王向飞 2011-03-16
去你的查询分析器 单独执行你的存储过程

也许是你程序定义的字符串太短呢。。
回复
wfy1591580 2011-03-16
我把整个存储过程贴出来吧。。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetRecordFromPage]
@SelectList VARCHAR(2000),
@TableSource VARCHAR(500),
@SearchCondition VARCHAR(max),
@OrderExpression VARCHAR(1000),
@pagetab VARCHAR(100),
@PageIndex INT = 1,
@PageSize INT = 10
AS
Begin
IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList)) = ''
Begin
SET @SelectList = '*'
End
SET @SelectList=Replace(@SelectList,'rownumber,','')
PRINT @SelectList
SET @SearchCondition = ISNULL(@SearchCondition,'')
IF @SearchCondition <> ''
Begin
IF UPPER(SUBSTRING(@SearchCondition,1,5)) <> 'WHERE'
Begin
SET @SearchCondition = 'WHERE 1=1 ' + @SearchCondition
SET @SearchCondition = Replace(@SearchCondition,'and and','and')
SET @SearchCondition = Replace(@SearchCondition,'and and','and')
SET @SearchCondition = Replace(@SearchCondition,'and and','and')
End
End
PRINT @SearchCondition
SET @OrderExpression = ISNULL(@OrderExpression,'')
SET @OrderExpression = LTRIM(RTRIM(@OrderExpression))
IF @OrderExpression <> ''
Begin
IF UPPER(SUBSTRING(@OrderExpression,1,5)) <> 'ORDER BY'
Begin
SET @OrderExpression = 'ORDER BY ' + @OrderExpression
End
End
PRINT @OrderExpression
SET @pagetab = ISNULL(@pagetab,'')
SET @pagetab = LTRIM(RTRIM(@pagetab))
IF @pagetab <> ''
Begin
IF UPPER(SUBSTRING(@pagetab,1,6)) <> '##page'
Begin
SET @pagetab = '##page' + @pagetab
End
End
PRINT @pagetab
IF @PageIndex IS NULL OR @PageIndex < 1
Begin
SET @PageIndex = 1
End
PRINT @PageIndex
IF @PageSize IS NULL OR @PageSize < 1
Begin
SET @PageSize = 10
End
PRINT @PageSize
DECLARE @SqlQuery VARCHAR(4000)
SET @SqlQuery='SELECT *
into '+@pagetab+' From
(SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +') AS RowNumber
From '+@TableSource+' '+ @SearchCondition +') AS RowNumberTableSource
WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)
+ ' AND ' +
CAST((@PageIndex * @PageSize) AS VARCHAR)
PRINT @SqlQuery
SET NOCOUNT ON
EXECUTE(@SqlQuery)
SET NOCOUNT off
End
回复
wfy1591580 2011-03-16
[Quote=引用 6 楼 wxf163 的回复:]
SQL code
declare @f varchar(max)
[/Quote]


你好,谢谢帮助,我刚才试过了,还是不行,这个提示,好像是参数长度过长,但是我的参数传入,还是没到达3000的长度的,应该在500以内。
回复
王向飞 2011-03-16
declare @f varchar(max)
回复
wfy1591580 2011-03-16
求帮助,求解答啊
回复
wfy1591580 2011-03-16
@SelectList VARCHAR(2000), " '--欲查询字段列表"
PageStr = PageStr & vbCrLf & "@TableSource VARCHAR(500), " '- -表名或视图表
PageStr = PageStr & vbCrLf & "@SearchCondition VARCHAR(3000)," ' --查询条件"
PageStr = PageStr & vbCrLf & "@OrderExpression VARCHAR(1000)," ' --排序表达式
PageStr = PageStr & vbCrLf & "@pagetab VARCHAR(100)," ' --临时表名
PageStr = PageStr & vbCrLf & "@PageIndex INT = 1," ' --页号,从0开始
PageStr = PageStr & vbCrLf & "@PageSize INT = 10 " '--页尺寸


以上是存储过程的参数类型。
回复
wfy1591580 2011-03-16
不好意思:
图片一:
图片二:
图片一如果再看不清楚,以下是执行语句:只是图片看会比较方便一点。
cn.Execute "exec GetRecordFromPage '" & cx_col & "'," & cx_tab & ",""" & cx_str & """,'" & cx_ord & "','" & ddd & "' , " & cx_pg & ", " & cx_nu & " "

望指点,谢谢回答的每一位
回复
--小F-- 2011-03-16
无图无真相
回复
nevergu 2011-03-16
图片看不到。请上传到CSDN。。。。
回复
wfy1591580 2011-03-16
同样感谢
nevergu
fredrickhu
两位的热心帮助
回复
wfy1591580 2011-03-16
[Quote=引用 18 楼 xiao_ai_mei 的回复:]
SET QUOTED_IDENTIFIER OFF 试试
[/Quote]


非常感谢,将此语句在执行存储过程前使用,问题解决,
同时感谢wxf163

(一只小小菜)
的热心帮助
回复
Xiao_Ai_Mei 2011-03-16
SET QUOTED_IDENTIFIER OFF 试试
回复
wfy1591580 2011-03-16
要沉了,自己顶一下,求帮助
回复
wfy1591580 2011-03-16
是啊,问题是不长的话又不报错,所以不知道那一段的传递要怎么写才对了,你看我发的第一张图片。。
回复
王向飞 2011-03-16
这问题不就很明显了么????

你程序传值的问题
回复
wfy1591580 2011-03-16
字符串的跟踪的话,其实我刚才说的独立在查询分析器执行,就是跟踪后复制下来的字符串输入进去的。那样不报错
回复
wfy1591580 2011-03-16
我用的是VB,不是JAVA,,,,
或者方便QQ帮我看下么,26238356
回复
王向飞 2011-03-16
跟踪一下你的bug


把关键字符串都打印出来
system.out.println();

自己一看字符串应该就知道什么问题了
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-16 11:16
社区公告
暂无公告