求:存储过程传 的一个参数(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
END
END
EXEC (@SQL)
SELECT @C
[解决办法]
报的错误是什么?是用LEN函数查看字符长度是多少?
[解决办法]
没来得及看详细语句
@SQLTXT VARCHAR(max) --sql语句
[解决办法]
--DECLARE @SQL NVARCHAR(1000),改成
DECLARE @SQL NVARCHAR(MAX)