高手请进,帮忙啊,动态表名出错啦

thinhorse2004 2003-07-22 03:03:37
不知道什么原因,高手指点一下。代码如下

/*上月表名*/
declare @tableName varchar(16)
set @tableName='jxcrb_kc'+cast(year(getdate())as varchar(4))+cast(month(getdate())-1 as varchar(2))

/*
 期初库存,
取上月期末库存
*/
UPDATE #jxcrb_kc2
SET qckc=b.qmkc
FROM #jxcrb_kc2 a,
(SELECT txm,isnull(qmkc,0.00) qmkc from @tableName c
WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b
WHERE
a.txm=b.txm


//************************************报错如下******************
服务器: 消息 137,级别 15,状态 2,过程 CH_JXCRB_KC_TZ2,行 50
必须声明变量 '@tableName'。
服务器: 消息 170,级别 15,状态 1,过程 CH_JXCRB_KC_TZ2,行 51
第 51 行: ')' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,过程 CH_JXCRB_KC_TZ2,行 59
必须声明变量 '@tableName'。

****************
各位高手帮帮我啊,急死了!
...全文
57 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
thinhorse2004 2003-07-22
  • 打赏
  • 举报
回复
大家帮帮受苦受难的兄弟啊!
分数不够可以再加!!!
愉快的登山者 2003-07-22
  • 打赏
  • 举报
回复
使用动态表名,就要使用动态执行EXEC。
thinhorse2004 2003-07-22
  • 打赏
  • 举报
回复
如果是一月份,调用存储过程CH_JXCRB_KC_TZ1 ,把数据取出来插入该表
其余月份,调用CH_JXCRB_KC_TZ2并插入数据
大家帮我看看,我这个写得是不是有问题啊?哎,郁闷啊,
thinhorse2004 2003-07-22
  • 打赏
  • 举报
回复
多谢多谢!
大家再帮我看看下面这个存储过程(小弟没写过sp,刚学的,等会给分,拜谢各位大侠!)
CREATE PROCEDURE CH_JXCRB_KC_TZ
AS
/*
第一个月期初库存从t_ck_kccs中得到,期末库存计算得到;
后11个月期初库存为上月期末库存,期末库存计算得到。
每天计算一次,循环计算一个月的天数。
--->---得到该月所有商店的进销存日数据统计台帐
*/

declare @cdate char(6)
set @cdate=convert(char(6),getdate(),112)


/*表名*/
declare @tableName varchar(16)
set @tableName='jxcrb_kc'+cast(year(getdate())as varchar(4))+cast(month(getdate())as varchar(2))


CREATE TABLE #jxcrb_kc(
sdmc varchar(16),
qsrq datetime,
jsrq datetime,
txm varchar(16),
jj numeric(18,2),
sj numeric(18,2),
qckc numeric(18,2),
qmkc numeric(18,2),
rksl numeric(18,2),
drsl numeric(18,2),
dcsl numeric(18,2),
thsl numeric(18,2),
bfsl numeric(18,2),
sysl numeric(18,2),
dbsl numeric(18,2),
xssl numeric(18,2)
)
declare @ttt int
set @ttt=convert(int,@cdate)
declare @date datetime

declare @iii int
if(month(getdate())=1 or month(getdate())=5 or month(getdate())=7 or month(getdate())=8 or month(getdate())=10 or month(getdate())=12)
set @iii=31
if(month(getdate())=2)
set @iii=28
if(month(getdate())=3 or month(getdate())=6 or month(getdate())=9 or month(getdate())=11)
set @iii=30

while(cast(substring(@cdate,5,2) as int)<(@iii+1))
BEGIN
IF month(getdate())=1
begin
set @date=convert(datetime,@ttt)
set @ttt=@ttt+1
INSERT #jxcrb_kc
 EXEC CH_JXCRB_KC_TZ1 @date1=@date,@date2=@date /*******56行********/
end
IF month(getdate())<>1
begin
set @date=convert(datetime,@ttt)
set @ttt=@ttt+1
INSERT #jxcrb_kc
 EXEC CH_JXCRB_KC_TZ2 @date1=@date,@date2=@date /*******63行********/
end
END


GO
//***************错误如下*********
服务器: 消息 170,级别 15,状态 1,过程 CH_JXCRB_KC_TZ,行 56
第 56 行: ' ' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,过程 CH_JXCRB_KC_TZ,行 63
第 63 行: ' ' 附近有语法错误。
pengdali 2003-07-22
  • 打赏
  • 举报
回复
declare @tableName varchar(16)
set @tableName='jxcrb_kc'+convert(char(6),getdate(),112)

exec('UPDATE #jxcrb_kc2
SET qckc=b.qmkc
FROM #jxcrb_kc2 a,
(SELECT txm,isnull(qmkc,0.00) qmkc from '+@tableName+' c
WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b
WHERE
a.txm=b.txm=')
thinhorse2004 2003-07-22
  • 打赏
  • 举报
回复
这样可以吗?
我后面还有一些UPDATE是不是也要包括在exec('')当中?
pengdali 2003-07-22
  • 打赏
  • 举报
回复
declare @tableName varchar(16)
set @tableName='jxcrb_kc'+cast(year(getdate())as char(4))+cast(month(getdate())-1 as char(2))


exec('UPDATE #jxcrb_kc2
SET qckc=b.qmkc
FROM #jxcrb_kc2 a,
(SELECT txm,isnull(qmkc,0.00) qmkc from '+@tableName+' c
WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b
WHERE
a.txm=b.txm=')
97866 2003-07-22
  • 打赏
  • 举报
回复
declare @tableName varchar(16)
Declare @SqlText varChar(500)
set @tableName='jxcrb_kc'+cast(year(getdate())as varchar(4))+cast(month(getdate())-1 as varchar(2))

/*
 期初库存,
取上月期末库存
*/
Set @SqlText='UPDATE #jxcrb_kc2 SET qckc=b.qmkc FROM #jxcrb_kc2 a,'
+'(SELECT txm,isnull(qmkc,0.00) qmkc from '
+@tableName
+'C WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b'
+' WHERE a.txm=b.txm'
Exec(@SqlText)
pengdali 2003-07-22
  • 打赏
  • 举报
回复
declare @tableName varchar(16)
set @tableName='jxcrb_kc'+cast(year(getdate())as char(4))+cast(month(getdate())-1 as char(2))


exec('UPDATE #jxcrb_kc2
SET qckc=b.qmkc
FROM #jxcrb_kc2 a,
(SELECT txm,isnull(qmkc,0.00) qmkc from '+@tableName+' c
WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b
WHERE
a.txm=b.txm=')
97866 2003-07-22
  • 打赏
  • 举报
回复
declare @tableName varchar(16)
Declare @SqlText varChar(500)
set @tableName='jxcrb_kc'+cast(year(getdate())as varchar(4))+cast(month(getdate())-1 as varchar(2))

/*
 期初库存,
取上月期末库存
*/
Set @SqlText='UPDATE #jxcrb_kc2 SET qckc=b.qmkc FROM #jxcrb_kc2 a,'
+'(SELECT txm,isnull(qmkc,0.00) qmkc from @tableName c '
+' WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b'
+' WHERE a.txm=b.txm'
Exec(@SqlText)
CrazyFor 2003-07-22
  • 打赏
  • 举报
回复
declare @tableName varchar(16)
set @tableName='jxcrb_kc'+cast(year(getdate())as varchar(4))+cast(month(getdate())-1 as varchar(2))

/*
 期初库存,
取上月期末库存
*/
exec('
UPDATE #jxcrb_kc2
SET qckc=b.qmkc
FROM #jxcrb_kc2 a,
(SELECT txm,isnull(qmkc,0.00) qmkc from '+@tableName+' c
WHERE c.txm in( SELECT txm from #jxcrb_kc2) )b
WHERE
a.txm=b.txm')

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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