请教一个简单的存储过程该怎么写。
比如这是一个计算某表有多少条记录的存储过程,传两个参数,一个是表名,一个是返回型。
CREATE PROCEDURE GetRowCount
@tblName varchar(800), -- 表名
@doCount int out -- 返回记录总数
AS
declare @strSQL varchar(800)
set @strSQL = 'select @doCount = count(*) from ' + @tblName
--上一句写法会报错,但就不知该怎么写。
EXEC(@strSQL)
GO
主要问题是SQL语句必须是定符串拼接成的,不知怎样在字符串中计算变量。请指教。
问题点数:20、回复次数:23Top
1 楼lsxaa(小李铅笔刀)回复于 2005-03-29 15:56:54 得分 0
sp_executesqlTop
2 楼wang_solaris(魔镜)回复于 2005-03-29 15:58:52 得分 0
能不能具体一点啊?
怎么写啊Top
3 楼mdx(巍巍太行山)回复于 2005-03-29 15:59:03 得分 0
...........
AS
select count(*) from @tblName
set @doCount=@@rowcount
GO
Top
4 楼talantlee(小刀(bluedagger.cn))回复于 2005-03-29 16:00:58 得分 0
CREATE PROCEDURE GetRowCount
@tblName varchar(800), -- 表名
@doCount int out -- 返回记录总数
AS
declare @strSQL varchar(800)
set @strSQL = 'select'+ @doCount+' = count(*) from ' + @tblName
--上一句写法会报错,但就不知该怎么写。
EXEC(@strSQL)
GO
Top
5 楼wang_solaris(魔镜)回复于 2005-03-29 16:02:50 得分 0
select count(*) from @tblName
???
这样好象不行吧Top
6 楼lsxaa(小李铅笔刀)回复于 2005-03-29 16:04:28 得分 0
CREATE PROCEDURE GetRowCount
@tblName nvarchar(800), -- 表名
@doCount int out -- 返回记录总数
AS
declare @strSQL nvarchar(800)
set @strSQL = N'select @doCount = count(*) from ' + @tblName
sp_execute @strSQL,'@doCount int out',@doCountTop
7 楼lsxaa(小李铅笔刀)回复于 2005-03-29 16:05:31 得分 0
CREATE PROCEDURE GetRowCount
@tblName nvarchar(800), -- 表名
@doCount int out -- 返回记录总数
AS
declare @strSQL nvarchar(800)
set @strSQL = N'select @doCount = count(*) from ' + @tblName
sp_executesql @strSQL,'@doCount int out',@doCount
Top
8 楼wang_solaris(魔镜)回复于 2005-03-29 16:10:34 得分 0
lsxaa(小李铅笔刀),你好,
不行嘛。它说'sp_executesql'附近有语法错误Top
9 楼lsxaa(小李铅笔刀)回复于 2005-03-29 16:13:11 得分 0
不好意思,少写了一个 exec 呵呵
CREATE PROCEDURE GetRowCount
@tblName nvarchar(800), -- 表名
@doCount int out -- 返回记录总数
AS
declare @strSQL nvarchar(800)
set @strSQL = N'select @doCount = count(*) from ' + @tblName
exec sp_executesql @strSQL,'@doCount int out',@doCountTop
10 楼wang_solaris(魔镜)回复于 2005-03-29 16:44:58 得分 0
请恕在下愚钝,在查询分析器里该怎么调用啊?
GetRowCount 'table1','@doCount'
这样啊行啊?
Top
11 楼lsxaa(小李铅笔刀)回复于 2005-03-29 16:52:08 得分 0
exec @doCount=GetRowCount 'table1'
Top
12 楼wang_solaris(魔镜)回复于 2005-03-29 16:54:14 得分 0
lsxaa(小李铅笔刀) ,你好,
它说必须声明变量 '@doCount'Top
13 楼lsxaa(小李铅笔刀)回复于 2005-03-29 16:57:52 得分 0
那你就声明一个贝
declare @doCount int
exec @doCount=GetRowCount 'table1'Top
14 楼lsxaa(小李铅笔刀)回复于 2005-03-29 16:58:14 得分 0
declare @doCount int
exec @doCount=GetRowCount 'table1'
select @doCountTop
15 楼wang_solaris(魔镜)回复于 2005-03-29 17:19:51 得分 0
过程 'GetRowCount' 需要参数 '@doCount',但未提供该参数。Top
16 楼wang_solaris(魔镜)回复于 2005-03-29 17:36:54 得分 0
lsxaa(小李铅笔刀) ,你好
现在不报错了。但是结果不对,为NULL。好象
exec sp_executesql @strSQL,'@doCount int out',@doCount
这一句不能把@doCount的值输出来。
你亲自试试。Top
17 楼lsxaa(小李铅笔刀)回复于 2005-03-29 17:40:25 得分 0
declare @doCount int
exec GetRowCount 'table1',@doCount
select @doCount
Top
18 楼wang_solaris(魔镜)回复于 2005-03-29 17:49:39 得分 0
lsxaa(小李铅笔刀) ,谢谢你,
但还是不能得出结果,输出为空:-(Top
19 楼RamjetZhang(万花从中一点红,玉树临风王小桃是也)回复于 2005-03-29 17:55:45 得分 5
楼上的楼上,少加了个output选项
declare @doCount int
exec GetRowCount 'table1',@doCount output --这里out型参数要加这个修饰
select @doCountTop
20 楼lsxaa(小李铅笔刀)回复于 2005-03-29 17:55:47 得分 15
declare @doCount int
exec GetRowCount 'table1',@doCount out
select @doCount
Top
21 楼lsxaa(小李铅笔刀)回复于 2005-03-29 17:56:11 得分 0
再试哈 不行再找我Top
22 楼lsxaa(小李铅笔刀)回复于 2005-03-29 17:56:30 得分 0
哦,有人看出来了Top
23 楼wang_solaris(魔镜)回复于 2005-03-29 18:16:54 得分 0
哈哈,出来啦。3Q两位大侠。Top




