提示过程需要参数 '@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中用多个串来拼接,改用个写法:
随手敲的,只示意,可能手误。
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
是的,因为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中用多个串来拼接,改用个写法:
随手敲的,只示意,可能手误。
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
是的,因为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