在存储过程中是否可以用变量来指定要插入记录的表名? ( 积分: 100 )

  • 主题发起人 主题发起人 刘雨
  • 开始时间 开始时间

刘雨

Unregistered / Unconfirmed
GUEST, unregistred user!
多个相同结构的表,如不同门店的库存商品表,如何在存储过程中指定表名?<br>因为门店未知,我想在增加门店时自动创建一个库存表,但是商品采购入库时,<br>如何在存储过程中用变量指定表名?<br>我想到的是:1、<br>CREATE&nbsp;PROC&nbsp;ABC<br>(@TABLE&nbsp;VARCHAR(20),&nbsp;&nbsp;&nbsp;------要插入的门店库存表名<br>)<br>AS<br>DECLARE&nbsp;@SQLSTRING&nbsp;VARCHAR(500)&nbsp;-----要执行的SQL插入记录语句<br>SET&nbsp;@SQLSTRING='INSERT&nbsp;INTO&nbsp;@TABEL_1(ID,......)VALUES(.......)<br>EXECUTE&nbsp;SP_EXECUTESQL&nbsp;@SQLSTRING<br>&nbsp;&nbsp;&nbsp;&nbsp;N'@TABLE_1&nbsp;VARCHAR(20)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@TABLE<br>UPDATE&nbsp;[其他表]&nbsp;SET&nbsp;数量=数量+[新入库数量]<br>GO<br>经测试,没有问题,但是不太了解EXECUTE&nbsp;SP_EXECUTESQL&nbsp;执行速度、性能怎么样,<br>请问各位高手,还有什么其他更好的办法没有?<br>2、因为是多个表,查询时我想用&nbsp;SELECT&nbsp;.....&nbsp;FROM&nbsp;表1&nbsp;UNION&nbsp;SELECT&nbsp;....FROM&nbsp;<br>表2&nbsp;UNION&nbsp;SELECT&nbsp;....&nbsp;FROM&nbsp;表3&nbsp;UNION&nbsp;...........<br>&nbsp;&nbsp;不过觉得太麻烦了,不知道有没有更好的查询方法?
 
各位老大,有没有人回答啊?
 
直接用Exec(@MySqlStr)就可以,如果用Union,要动态生成SQL语句,
 
create&nbsp;table&nbsp;tablename<br>(<br>&nbsp;a&nbsp;int<br>)<br>go<br>declare&nbsp;@table&nbsp;nvarchar(300)<br>set&nbsp;@table&nbsp;=&nbsp;'tablename'<br>set&nbsp;@table&nbsp;=&nbsp;'select&nbsp;*&nbsp;from&nbsp;'&nbsp;+&nbsp;@table<br>EXECUTE&nbsp;sp_executesql&nbsp;@table
 
来迟了,完全同意二楼和三楼的。说的都对,三楼的详细一点。
 
多人接受答案了。
 
后退
顶部