我想写个 传入表名 得出该表有几条数据的一个函数.. 怎么写呢

msy_84 2010-05-31 03:58:27
exec ('select count (1) from'+ @tableName ) 这个的执行值能传出来吗? 怎么传啊
...全文
92 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
msy_84 2010-06-04
  • 打赏
  • 举报
回复
呵呵,发了两个重复贴,应该是不小心提交了两次吧,哈哈。不过既然发了,帖子还是要结的。。谢谢各位的帮忙。。 。。
永生天地 2010-06-01
  • 打赏
  • 举报
回复
create function f_test
(@tb varchar(10))
returns int
as
begin
declare @i int
select @i=rowcnt from dbo.sysindexes where id = object_id(@tb,'U') and indid=0
return @i
end
ShenLiang2025 2010-06-01
  • 打赏
  • 举报
回复


1)既然从sysindexes读取Rowcount,那么where id = object_id(@tb,'U')是多余的条件.
不过可以过滤传的参数是否是表.

2)and indid=0是堆的情况,如果有聚集索引呢?!

3)而简单的如下代码,也不对.得到的结果可能为0.因为sysindexes存的不仅仅是Index的信息,还有Statistics的信息.

begin
declare @i int
select @i=rowcnt
from dbo.sysindexes
where id = object_id(@tb,'U')
return @i
end

--4)改进后的.

CREATE FUNCTION ufn_TabCount
(@tb varchar(300))
RETURNS INT
AS
BEGIN
IF object_id(@tb,'U') IS NULL
BEGIN
RETURN -999999
END
DECLARE @i int
SELECT @i=rowcnt FROM sys.sysindexes ind
WHERE OBJECT_NAME(id) = @tb
AND OBJECTPROPERTY(id,'IsMSShipped') = 0
AND(indid = 1 OR indid = 0)
RETURN @i
END

5) 测试
PRINT dbo.ufn_TabCount('_tabDetails')
359

PRINT dbo.ufn_TabCount('tbl_Show')
-999999


htl258_Tony 2010-05-31
  • 打赏
  • 举报
回复
IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@tbname SYSNAME,
@cnt INT OUT
AS
DECLARE @sql NVARCHAR(4000)
SET @sql = N'SELECT @cnt = COUNT(1) FROM ['+@tbname+']'
EXEC sp_executesql @sql, N'@cnt INT OUT', @cnt OUT
GO


DECLARE @cnt INT
EXEC [p_test] tb,@cnt OUT
PRINT @cnt
/*
31
*/
存储过程的方式
水族杰纶 2010-05-31
  • 打赏
  • 举报
回复
为什么函数就实现不了?
dawugui 2010-05-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 msy_84 的回复:]
exec ('select count (1) from'+ @tableName ) 这个的执行值能传出来吗? 怎么传啊
[/Quote]

http://topic.csdn.net/u/20100531/15/9646676a-4fda-405a-856d-d6a0b1022b9f.html?6152

3楼.

另:函数实现不了你的功能.

永生天地 2010-05-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 msy_84 的回复:]
exec ('select count (1) from'+ @tableName ) 这个的执行值能传出来吗? 怎么传啊
[/Quote]
很明确的告诉你,在函数里是不能实现的
水族杰纶 2010-05-31
  • 打赏
  • 举报
回复
--函数
create function fn_name
(@tb varchar(10))
returns int
as
begin
declare @i int
select @i=rowcnt
from dbo.sysindexes
where id = object_id(@tb,'U')
return @i
end
chuifengde 2010-05-31
  • 打赏
  • 举报
回复
exec sp_executesql @sql,N'@count int out',@count int out
水族杰纶 2010-05-31
  • 打赏
  • 举报
回复
declare @count int
declare @sql nvarchar(1000)
select @sql='select @count=count (1) from'+ @tableName
exec sp_executesql @sql,N'@count int output',@count output
select @count
chuifengde 2010-05-31
  • 打赏
  • 举报
回复
declare @sql nvarchar(1000)
declare @count int

set @sql='select @count=count(1) from '+@tableName
exec sp_executesql @sql,N'@count int out',@count int
select @count
水族杰纶 2010-05-31
  • 打赏
  • 举报
回复

刚才回答了?

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧