当前位置:主页>仓库管理软件> 列表

sql server2000存储过程 exec() 的问题 找简单进销存

仓库管理软件版1楼: 为什么执行exec(''select @count=count(*) from table''),得到的@count始终等于0?(table里面是有数据的,不用exec()的方式而直接执行select ...就能执行成功!)因为,在程序中table的名字不是固定的,不能直接写select的形式

2楼: 你这样做是想达到什么样的目的啊 如畅销进销存注册码

3楼: table的名字不是固定的,就写成参数传递嘛

4楼: 后面还有些条件where,但就这样返回的都是0了
to royal1442:
是不是这样:exec(''select @count=count(*) from ''+@tablename+'' where id=''''''+@id+'''''''')?

5楼: 你可以把你的要求详细些说出来吗,也许可以不用这个方法来做啊

6楼: 就是要看数据表里面是否已经有了满足where要求的记录

仓库管理软件版7楼: 在Delphi中写,合成SQL语句的时候,表名做参数嘛

8楼: 應該是這樣就正確了。
CREATE PROCEDURE GetCount
AS
DECLARE @SQL NVARCHAR(1000), @VAL INT
SET @SQL = ''SELECT @GetINT=COUNT(*) FROM Table1''
EXEC sp_executesql @SQL,N''@GetINT INT OUTPUT'',@VAL OUTPUT


SELECT @VAL
GO

9楼: 楼主你语句能执行?
exec 是一个函数
没有定义局部变量@count?
???

10楼: 如果只是简单的得到记录的个数为什么要用EXEC呢。
直接用OPEN
Select Count(*) as Num from YouTable
然后
得到这个Num的值就可以了!

11楼: 就一条语句,直接在Delphi程序里写
''Select count(*) FROM''+表名

12楼: 在动态sql里使用参数 ,它是作为一个局部变量处理的 ,这个变量的作用域仅仅限于这条动态sql。我在处理这个问题的时候也遇到了同样的问题 。解决办法,一种是把参数作为输出参数;另外一种是创建临时表来存储这些需要返回的值。 如管家婆软件使用说明

13楼: @Count你没有传出吧,是个局部变量,执行存储过程后,再显示,由于是整型,肯定为零啦,你可以做为一个参数传出,或是全局变量就OK

仓库管理软件版14楼: 刚才试过了,可以的:
CREATE procedure rcount
@tablename varchar(50)
AS

declare @sqlstr varchar(200)
set @sqlstr=''select count(*) from '' + @tablename
exec(@sqlstr)

15楼: 修改後,可以用不同的數據表執行:GetCount ''Table''

CREATE PROCEDURE GetCount @MyTable VARCHAR(100)
AS
DECLARE @SQL NVARCHAR(1000), @VAL INT, @COUNT INT
SET @SQL = ''SELECT @GETCOUNT=COUNT(*) FROM ''+@MyTable
EXEC sp_executesql @SQL,N''@GETCOUNT INT OUTPUT'',@VAL OUTPUT
SET @COUNT = @VAL
SELECT ''表的記錄數''=@COUNT
GO

16楼: 楼上的是正确的,在exec里面直接执行SQL语句,是不能对参数赋值的,除非用sp_executesql。显示0是他原来的值,如果在执行前你给@Count赋个值100,执行后显示的还是100,可证明在语句中没被赋值过

17楼: to bbscom:
我试了你的代码,怎么返回的@count还是0呢?

18楼: 我的就是正确的哦。

19楼: to renyi:
怎么取出数据呢?才能判断啊?比如,if @count>0 ...

20楼: adoquery.close;
adoquery.sql.clear;
adoquery.sql.text:=''select count(*) as aa from ''+edit1.text;
//edit1为输入表名
adoquery.open;
edit2.text:=adoquery.fieldbyname(''aa'').asstring;
adoquery.close;

仓库管理软件版21楼: to deardai:
我问的是在存储过程里该怎么写?

22楼: if @count>0 这种判断就放在Delphi里做了。 如简单进销存

23楼: 多人接受答案了。