问一个关于存储过程的以表名作为传递参数的问题。

我简单写一下Createprocedure[dbo].[a]@begTimedatetime,@endTimedatetime,@tableNamenvarchar(50... 我简单写一下
Create procedure [dbo].[a]
@begTime datetime,
@endTime datetime,
@tableName nvarchar(50)
AS
BEGIIN
SELECT * FROM @tableName Where aTime > @begTime and aTime < @endTime
END

最后执行以上语句的时候,提示如下:
'@tableName' 附近有语法错误。

求解。。。以上这样写不行的吗?我把 @tableName 改成固定的表名后,就执行成功了。后面的两个时间参数也没有报错啊。为什么作为表名传参数的时候就报错了。。。郁闷。。
展开
 我来答
dongfanghong_1
2012-03-16 · TA获得超过363个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:306万
展开全部
动态语句,不是你这样子玩的,基础的东西 ,这样写吧:

Create procedure [dbo].[a]
@begTime datetime,
@endTime datetime,
@tableName nvarchar(50)
AS
BEGIN
declare @sql varchar(1000)

set @sql='SELECT * FROM '+@tableName+' Where aTime > '+@begTime+' and aTime < '+@endTime+''

exec(@sql)
END
更多追问追答
追问
不好意思,刚才跑开做别的事了,刚回来。
我试过了,但是它也会报错的:

从字符向datetime转换时失败。

参数都一样的,我没改过。我上面举的例子,时间格式就没问题,你写的这一种就会报这种错误,不晓得是什么原因呢?
追答
不晓得么原因。
比较数据时,类型不对呗。那就人工转换啊
set @sql='SELECT * FROM '+@tableName+' Where pwd_endtime > convert(datetime,'''+@begTime+''')
and pwd_endtime < convert(datetime,'''+@endTime+''')'

注意把@sql的长度调大点,免得截断字符串。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式