存储过程的问题,各位高手帮我看一下啦,在线等待 参数只能传值,因为存储过程是预编译的,SQL语句不能作为参数;所以你后面这种会出现语法错误如果你非要这样做,那就不用存储过程了,在程序里面动态产生SQL语句来做 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我这样declare @strTable varchar(20)declare @condition varchar(50)declare @strSql varchar(100)declare @r_return intselect @strTable = 'sys_template'select @condition = 'id=99'@strSql = "select Count(*) from " + @strTable + " where " + @conditionselect @r_return = exec(@strSql)print @r_rerurn这样做也不行其实我就是想得到返回的值,我这样做怎么能得到返回值呢? 我已经说过了在存储过程中,变量只能用于传字段的值,SQL语句本身是要预编译的,所以不能够向你这样动态产生SQL语句;你一定要这么做的话,就不能够使用存储过程,而是使用编程的方式,在程序里面去动态产生SQL语句 真是这样,那不是只要是动态的写入的sql语句都不能放在SP中,那SP的功能也就太差了吧,那天思归较了我一招,跟上面最后一种方法差不多,就是没返回值而已,所以,我认为应该是有办法的,成功的SP如下:CREATE PROCEDURE sp_strAddData( @fieldName varchar(300), @fieldValue varchar(300), @strTable varchar(20), @return varchar(20) output) AS declare @m_fieldName varchar(300) declare @m_fieldValue varchar(300) declare @tempName varchar(50) declare @tempValue varchar(50) declare @i integer declare @j integer declare @lenName integer declare @lenValue integer declare @strSql varchar(500) select @m_fieldName = '' select @m_fieldValue = '''' select @tempName = '' select @tempValue = '' select @i = 0 select @j = 0 select @lenName = len(@fieldName) select @lenValue = len(@fieldValue) select @strSql ='' while (@i<=@lenName) begin select @tempName = substring(@fieldName,@i,1) if (@tempName = '&') select @m_fieldName = @m_fieldName + ',' else select @m_fieldName = @m_fieldName + @tempName select @i = @i+1 end while (@j<=@lenValue) begin select @tempValue = substring(@fieldValue,@j,1) if (@tempValue = '&') select @m_fieldValue = @m_fieldValue + ''',''' else select @m_fieldValue = @m_fieldValue + @tempValue select @j = @j+1 end select @m_fieldValue = @m_fieldValue + '''' exec ('insert into ' + @strTable + ' (' + @m_fieldName + ') values (' + @m_fieldValue + ')') select @return = 'OK' returnGO 用EXEC是不能传值出来的,只有这样declare @strTable varchar(20)declare @condition varchar(100)declare @number intselect @strTable='sys_template'select @condition='id=99'EXEC('select @number=count(*) from '+@strTable+' where '''+@condition+'''print @number') 或者EXEC('select @number=count(*) from '+@strTable+' where '''+@condition+'''')SELECT @number = @@ROWCOUNTprint @number 求指引,谢谢 问一个有关打印的问题 ::存储过程之行列转换与全局临时表的问题:: 问个关于鼠标拖动的问题 關於水晶報表的一個小問題 请帮忙看看我的ajax自动匹配代码,为什么不行 VS.Net新增时出错[Object Error]错误 能不能通过 SQL 语句将指定列的所有值连接起来? 急急急 高分咨询:学习asp.net,从那入手呢?先语言还是先工具? web.config的问题 天哪!我连新建一个ASP.NET WEB应用程序都报错
declare @strTable varchar(20)
declare @condition varchar(50)
declare @strSql varchar(100)
declare @r_return intselect @strTable = 'sys_template'
select @condition = 'id=99'@strSql = "select Count(*) from " + @strTable + " where " + @conditionselect @r_return = exec(@strSql)print @r_rerurn这样做也不行
其实我就是想得到返回的值,我这样做怎么能得到返回值呢?
你一定要这么做的话,就不能够使用存储过程,而是使用编程的方式,在程序里面去动态产生SQL语句
CREATE PROCEDURE sp_strAddData(
@fieldName varchar(300),
@fieldValue varchar(300),
@strTable varchar(20),
@return varchar(20) output
) AS
declare @m_fieldName varchar(300)
declare @m_fieldValue varchar(300)
declare @tempName varchar(50)
declare @tempValue varchar(50)
declare @i integer
declare @j integer
declare @lenName integer
declare @lenValue integer
declare @strSql varchar(500)
select @m_fieldName = ''
select @m_fieldValue = ''''
select @tempName = ''
select @tempValue = ''
select @i = 0
select @j = 0
select @lenName = len(@fieldName)
select @lenValue = len(@fieldValue)
select @strSql =''
while (@i<=@lenName)
begin
select @tempName = substring(@fieldName,@i,1)
if (@tempName = '&')
select @m_fieldName = @m_fieldName + ','
else
select @m_fieldName = @m_fieldName + @tempName
select @i = @i+1
end while (@j<=@lenValue)
begin
select @tempValue = substring(@fieldValue,@j,1)
if (@tempValue = '&')
select @m_fieldValue = @m_fieldValue + ''','''
else
select @m_fieldValue = @m_fieldValue + @tempValue
select @j = @j+1
end
select @m_fieldValue = @m_fieldValue + '''' exec ('insert into ' + @strTable + ' (' + @m_fieldName + ') values (' + @m_fieldValue + ')') select @return = 'OK'
return
GO
declare @strTable varchar(20)
declare @condition varchar(100)
declare @number intselect @strTable='sys_template'
select @condition='id=99'EXEC('
select @number=count(*) from '+@strTable+' where '''+@condition+'''
print @number
')
EXEC('
select @number=count(*) from '+@strTable+' where '''+@condition+'''')
SELECT @number = @@ROWCOUNT
print @number