日期:2014-05-16  浏览次数:20682 次

关于动态语句问题
本帖最后由 feimao784830900 于 2014-03-12 18:19:09 编辑
比如说我在库Goods中有个表,GoodsCode(code,goodsName)
1  100   商品1
2  101   商品2
根据这个表,就会建立两个库,History100,History101。根据上表建的库,都有类似的表 test10XAAA

同理,Goods库中,有个专门定义每个库有哪些表,库名:GoodsTable,字段如下
库名    原表名               新表名
100      test100AAA    test100BBB
101      test101AAA    test101BBB
查询出来以上数据,就需要把100库的  test100AAA 改为test100BBB,101库的test101AAA    test101BBB

那我应该如何动态修改啊?

use Goods
declare @oldtableName varchar(50)
declare @newtableName varchar(50)
declare @db varchar(32)
declare @use varchar(50)
declare alter_table cursor for
SELECT 库名,原表名,新表名 from GoodsTable
open alter_table
fetch next from alter_table into @db,@oldtableName,@newtableName 
while @@FETCH_STATUS = 0
begin
        Set @use=‘History’+@db
        EXEC ('USE '+ @use);
        -- 这里就有问题了,
         EXEC  sp_rename  @oldtableName, @newtableName 
 fetch next from alter_table into @db,@oldtableName,@newtableName 
end
CLOSE alter_table
DEALLOCATE alter_table

报错:在当前数据库 'Goods' 中找不到名为 @oldtableName的项(假定输入的 @itemtype 为 '(null)')。
首先说明,这个库已经在用了,不可能是重建库和表名,因为每个库都有很多数据的。所以只能是修改

------解决方案--------------------
引用:
比如说我在库Goods中有个表,GoodsCode(code,goodsName)
1  100   商品1
2  101   商品2
根据这个表,就会建立两个库,History100,History101。根据上表建的库,都有类似的表 test10XAAA

同理,Goods库中,有个专门定义每个库有哪些表,库名:GoodsTable,字段如下
库名    原表名               新表名
100      test100AAA    test100BBB
101      test101AAA    test101BBB
查询出来以上数据,就需要把100库的  test100AAA 改为test100BBB,101库的test101AAA    test101BBB

那我应该如何动态修改啊?

use Goods
declare @oldtableName varchar(50)
declare @newtableName varchar(50)
declare @db varchar(32)
declare @use varchar(50)
declare alter_table cursor for
SELECT 库名,原表名,新表名 from GoodsTable
open alter_table
fetch next from alter_table into @db,@oldtableName,@newtableName 
while @@FETCH_STATUS = 0
begin
        Set @use=‘History’+@db
        EXEC ('USE '+ @use+' exec sp_rename  '+@oldtableName+', '+@newtableName  );
        -- 这里就有问题了,
         --EXEC  sp_rename  @oldtableName, @newtableName 
 fetch next from&nbs