日期:2014-05-17  浏览次数:20894 次

求:存储过程传 的一个参数(sql语句)不能超过255个字符的解决方法?
sql server 2005      这个存储过程在网上很多, 也应用了很久,  突然最近是一个功能上使用的sql 语句算法太长, 无法再调用了。 后来检查了发现原因是 sql 语句超过了 255个字符, 后来优化了一下语句让它缩减了字符数, 问题就解决了。     

你们看一下, 我的存储过程sql 参数是  vcarchar(1000)  1000个字符呀,  为何会发生限语句长度的问题呢?  

今天我可能通过优化来让sql  语句缩减了,  但明天, 后天要是算法更复杂, 涉及的表及条件更多的时候,超 长的sql 如何分页?


存储过程如下:
------

ALTER  PROCEDURE [dbo].[ChargerPageList]
@NL int, --第几页
@PN int, --每页行数
@AC nvarchar(100) = '',     --排序的字段名 (即 order by column asc/desc) 
@OT INT = 0 ,                   ---排序的类型 (0为升序,1为降序) 
@SQLTXT  VARCHAR(1000)  --sql语句
AS
DECLARE @SQL NVARCHAR(1000),@S VARCHAR(500),@OT1 VARCHAR(10),@OT2 VARCHAR(10)
DECLARE @PC INT,@C INT

SET @SQL = 'SELECT @A= COUNT(*)   FROM ('+@SQLTXT+')T '
EXEC sp_executesql @SQL,N'@A int output', @C output


SET @PC = @PN * @NL

IF @OT=0
BEGIN
  SET @OT1='ASC'
  SET @OT2 ='DESC'
END
ELSE
BEGIN
  SET @OT1='DESC'
  SET @OT2 ='ASC'
END

IF @C < @PC
BEGIN
   SET @PC= @PN - (@PC - @C)
   SET @SQL='SELECT TOP '+CAST( @PC AS VARCHAR(100))+' *  FROM ('+@SQLTXT+')T ORDER BY  '+@AC+' '+@OT2
   SET @SQL= 'SELECT  * FROM ('+@SQL+') T ORDER BY '+@AC+' ' + @OT1
END
ELSE
BEGIN
IF @NL =1 
BEGIN 
    SET @SQL = 'SELECT TOP  ' +CAST(@PN AS VARCHAR(10))+' * FROM ('+@SQLTXT+') T ORDER BY '+@AC+' '+@OT1
END 
ELSE
BEGIN

   SET @SQL= 'SELECT TOP ' +CAST(@PC AS VARCHAR(10)) + ' * FROM ('+@SQLTXT+') T ORDER BY '+@AC+' '+@OT1
   SET @SQL= 'SELECT TOP ' +CAST(@PN AS VARCHAR(10)) +' * FROM ('+@SQL+') T ORDER BY '+@AC+' ' + @OT2
   SET @SQL= 'SELECT  * FROM ('+@SQL+') T ORDER BY '+@AC+' ' + @OT1