新手求解答一个问题

m0_37468848 2019-04-09 11:57:36
declare @tables char(11);declare @tablename char(11);declare @BeginDate datetime;declare @tabletime char(6);
set @tables='pay_j';set @BeginDate='2017-11-1';set @tabletime=left((convert(varchar(10),@BeginDate,112)),6);
set @tablename=rtrim(ltrim(@tables))+rtrim(ltrim(@tabletime));
print @tablename;
select * from @tablename;
查询提示必须声明表变量 "@tablename"。
我想要实现的效果如下,
select * from pay_j201711;
对sql只是入门,很多东西还是不懂,求高手解答下我的疑惑。
...全文
59 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37468848 2019-04-09
  • 打赏
  • 举报
回复
谢谢各位老师的详细解答
二月十六 版主 2019-04-09
  • 打赏
  • 举报
回复
@tablename当做参数变量,不能直接from 要用拼接语句的形式
DECLARE @tables CHAR(11);
DECLARE @tablename CHAR(11);
DECLARE @BeginDate DATETIME;
DECLARE @tabletime CHAR(6);
SET @tables = 'pay_j';
SET @BeginDate = '2017-11-1';
SET @tabletime = LEFT((CONVERT(VARCHAR(10), @BeginDate, 112)), 6);
SET @tablename = RTRIM(LTRIM(@tables)) + RTRIM(LTRIM(@tabletime));
PRINT @tablename;
DECLARE @sql NVARCHAR(max)='SELECT * FROM '+@tablename;
EXEC(@sql)
philo_peng 2019-04-09
  • 打赏
  • 举报
回复

你的意思表名是个变量就是了;


declare @tables char(11);
declare @BeginDate datetime;
declare @tabletime char(6);

set @tables='pay_j';
set @BeginDate='2017-11-1';
set @tabletime=left((convert(varchar(10),@BeginDate,112)),6);
set @tablename=rtrim(ltrim(@tables))+rtrim(ltrim(@tabletime));

BEGIN

DECLARE @tablename nvarchar(200)
DECLARE @sql NVARCHAR(MAX)
SET @sql
= 'SELECT * from ' + @tablename ;
exec(@sql)
END


类似这个执行下存储过程试试,应该可以的。

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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