SQL2005的“必须声明标量变量”错误
- SQL code
declare @icount int declare @sql nvarchar(2000) set @sql = 'select @icount=count(crmcustomerid) from ' + @tablename + ' where crmcustomerid = ' + cast(@pi_iCrmcustomerId as varchar) exec sp_executesql @sql,N'@icount int output',@icount output select @icount as a if @icount > 0 ...........
如上代码是放在一个存储过程里执行的,报“必须声明标量变量 "@icount”错误。
[解决办法]
- SQL code
declare @icount int declare @sql nvarchar(2000) set @sql = 'select '+cast(@icount as varchar(10))+'=count(crmcustomerid) from ' + @tablename + ' where crmcustomerid = ' + cast(@pi_iCrmcustomerId as varchar) exec sp_executesql @sql,N'@icount int output',@icount output select @icount as a if @icount > 0
[解决办法]
如果磊仔的没问题我就不说了
[解决办法]
语法应该没什么错误的。
[解决办法]
[解决办法]
2008里 测试楼主代码 没有任何问题啊
create proc P_TEST
as
declare @tablename varchar(200)='TBA'
declare @icount int
declare @sql nvarchar(2000)
set @sql = 'select @icount=count(a) from ' + @tablename
exec sp_executesql @sql,N'@icount int output',@icount output
select @icount as a
if @icount > 0
print 'OK'
[解决办法]
你那个crmcustomerid字段是什么类型?
[解决办法]
最好先确定下 是哪个@icount出了问题。
declare @icount int
declare @TI int
declare @sql nvarchar(2000)
set @sql = 'select '+cast(@icount as varchar(10))+'=count(crmcustomerid) from ' + @tablename + ' where crmcustomerid = ' + cast(@pi_iCrmcustomerId as varchar)
exec sp_executesql @sql,N'@icount int output',@icount output
select @icount as a
set @TI=@icount
if @TI> 0
[解决办法]
[解决办法]
MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和
sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC
没有。还有一个最大的优点就是运用 sp_executesql,能够重用执行计划,这就大大
提供了执行性能(对于这个我在后面的例子中会详加说明),还可以编写更安全的代码
。EXEC在某些情况下会更灵活。除非您有令人信服的理由运用 EXEC,否侧尽量运用
sp_executesql.