请教如何修改declare @strSQL nvarchar(4000)参数类型和长度让它正常运行,长度在1w以上。。

时间:2022-11-08 06:23:51
因为查询条件过多长度超过4000字符,将declare  @strSQL   nvarchar(4000)变量改为varchar(8000)不行。
提示过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
请教如何修改declare  @strSQL   nvarchar(4000)参数类型和长度让它正常运行,长度在1w以上。。


CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @strSQL   nvarchar(4000)
set @strSQL = 'select @RecordCount=Count('+@fldName+') from [' + @tblName + '] '+@strWhere
exec sp_executesql @strSQL,N'@RecordCount int output',@RecordCount output
GO

9 个解决方案

#1


Ntext

#2


对于局部变量,text、ntext 和 image 数据类型无效

#3


sql2005中用 nvarchar(max)

sql2000中用多个串来拼接,改用个写法:



CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @s1 varchar(8000),@s2 varchar(8000)
create table #(cnt int) 
set @s1='insert # select Count('+@fldName+')',@s2=' from [' + @tblName + '] '+@strWhere
exec(@s1+@s2)
select @RecordCount = cnt from #
drop table #
GO




随手敲的,只示意,可能手误。

#4


nvarchar(max)这个是用来代替ntext的!

#5


引用 3 楼 fcuandy 的回复:
sql2005中用 nvarchar(max) 

sql2000中用多个串来拼接,改用个写法: 



SQL code
CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @s1 varchar(8000),@s2 varchar(8000)
create table #(cnt int) 
set @s1='insert # select Count('+…


是的,因为2000中,局部变量不能使用text,ntext这样的数据类型.

#6


改变写法,给程序减减肥!一个条件用掉1w字符,也太有问题了!

#7


我指提理论上W长度的条件字符数

#8


那说明你的语句有问题,没有人愿意写这么长的sql

#9


请教如何在查询分析器中调试这个存储过过程

CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @strSQL   nvarchar(4000)
set @strSQL = 'select @RecordCount=Count('+@fldName+') from [' + @tblName + '] '+@strWhere
exec sp_executesql @strSQL,N'@RecordCount int output',@RecordCount output
GO

#1


Ntext

#2


对于局部变量,text、ntext 和 image 数据类型无效

#3


sql2005中用 nvarchar(max)

sql2000中用多个串来拼接,改用个写法:



CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @s1 varchar(8000),@s2 varchar(8000)
create table #(cnt int) 
set @s1='insert # select Count('+@fldName+')',@s2=' from [' + @tblName + '] '+@strWhere
exec(@s1+@s2)
select @RecordCount = cnt from #
drop table #
GO




随手敲的,只示意,可能手误。

#4


nvarchar(max)这个是用来代替ntext的!

#5


引用 3 楼 fcuandy 的回复:
sql2005中用 nvarchar(max) 

sql2000中用多个串来拼接,改用个写法: 



SQL code
CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @s1 varchar(8000),@s2 varchar(8000)
create table #(cnt int) 
set @s1='insert # select Count('+…


是的,因为2000中,局部变量不能使用text,ntext这样的数据类型.

#6


改变写法,给程序减减肥!一个条件用掉1w字符,也太有问题了!

#7


我指提理论上W长度的条件字符数

#8


那说明你的语句有问题,没有人愿意写这么长的sql

#9


请教如何在查询分析器中调试这个存储过过程

CREATE PROCEDURE docount
@tblName      varchar(255),       -- 表名
@fldName      varchar(255),       -- 字段名
@strWhere     varchar(8000) = '',  -- 查询条件 (注意: 加 where)
@RecordCount int output
AS
declare  @strSQL   nvarchar(4000)
set @strSQL = 'select @RecordCount=Count('+@fldName+') from [' + @tblName + '] '+@strWhere
exec sp_executesql @strSQL,N'@RecordCount int output',@RecordCount output
GO