问一个关于存储过程的以表名作为传递参数的问题。
我简单写一下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 改成固定的表名后,就执行成功了。后面的两个时间参数也没有报错啊。为什么作为表名传参数的时候就报错了。。。郁闷。。 展开
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 改成固定的表名后,就执行成功了。后面的两个时间参数也没有报错啊。为什么作为表名传参数的时候就报错了。。。郁闷。。 展开
1个回答
展开全部
动态语句,不是你这样子玩的,基础的东西 ,这样写吧:
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
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的长度调大点,免得截断字符串。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询