在SQL Server 2005中,我希望使用通配符重命名很多表, 例如,表名是:
OrderItem
OrderItems
OrderItemss
我希望将它们重命名为:
OrderItem2
OrderItems2
OrderItemss2
这可以使用通配符完成,所以我不必指定完整的表名吗?感谢。
答案 0 :(得分:2)
您可以使用系统表选择与您的模式匹配的所有表名称,例如'OrderItem%',或更复杂。然后使用动态sql使用exec SP_RENAME 'old_name' 'new_name'
更新名称。
但是,这不会对查询表的存储过程生效。重命名完成后,需要重新编译这些存储过程。
解决方案Sql
好的,这是整个代码。它基于表名以“OrderItem”开头,并且它们都具有后缀为“2”的原始名称。在重命名之前,我创建了一个包含找到的表的表变量。如果您“取消注释”select语句并且只执行该语句,您可以看到选择要重命名的表以及它们将被重命名的内容。 注意我只是从dbo架构中选择表格。
declare @OldTableName nvarchar(max)
declare @NewTableName nvarchar(max)
declare @SqlStmt nvarchar(max)
declare @Tables table
(
OldTableName nvarchar(max),
NewTableName nvarchar(max)
)
insert into @Tables (OldTableName, NewTableName)
select
name as OldTableName ,
name + '2' as NewTableName
from sys.tables
where name like 'OrderItem%'
and schema_id = SCHEMA_ID('dbo')
-- select * from @Tables
declare cur cursor for
select OldTableName,
NewTableName
from @Tables
open cur
while (1=1)
begin
fetch next from cur into @OldTableName, @NewTableName
if @@FETCH_STATUS <> 0
break
set @SqlStmt = N'sp_rename ''' + @OldTableName + ''', ''' + @NewTableName + ''''
exec sp_executesql @SqlStmt
end
close cur
deallocate cur
NEW 24apr2013
选择包含架构名称的语句,而不仅仅是查找dbo
架构
select
s.name + '.' + t.name as OldTableName,
t.name + '2' as NewTableName
from sys.tables as t
inner join sys.schemas as s on t.schema_id = s.schema_id
where t.name like 'OrderItem%'
<强>加强>
在sys.tables
中查找所有表(请记住只选择要重命名的模式中的那些表)。将名称插入临时表以及您为其提供的新表名称,然后迭代每个名称,生成一个sql字符串,调用sp_rename
并使用exec sp_executesql 'SQL STMT'
进行实际操作执行。
答案 1 :(得分:1)
就是这么简单:
DECLARE @SQL nvarchar(max);
SELECT
@SQL = Coalesce(@SQL + Char(13) + Char(10), '') + 'EXEC sp_rename '''
+ Replace(QuoteName(TABLE_SCHEMA) + '.' + QuoteName(TABLE_NAME), '''', '''''')
+ ''', ''' + Replace(TABLE_NAME + '2', '''', '''''') + ''';'
FROM INFORMATION_SCHEMA.TABLES T
WHERE
T.TABLE_TYPE = 'BASE TABLE'
AND T.TABLE_NAME LIKE 'OrderItem%'
;
EXEC (@SQL);
答案 2 :(得分:0)
您可以通过此查询获取所需的所有用户表的列表:
select name from sysobjects where type = 'U' and name like 'user%'
然后使用sp_executesql
和游标查询结果来执行动态SQL(MSDN)以执行实际重命名。
希望有所帮助。
答案 3 :(得分:-1)
首先,所有人都找到数据库中的表数(我有3个) 并将此代码放在存储过程中,也可以输入参数!!
`alter procedure [dbo].[changetableName]
as
declare @sql varchar(8000), @table varchar(1000), @oldTable varchar(1000),
@newTable
varchar(1000);
declare @Inc integer;
set @Inc=1;
set @oldTable = '%OrderItem%'
set @newTable = 'OrderItem_n'
while exists(SELECT object_id, t.name AS table_name FROM sys.tables AS t where
t.name Like @oldTable) and (@Inc<=3)
begin
select @table = name from sys.tables
where object_id in(select object_id from sys.tables as t where t.name like
@oldTable )
set @sql = 'sp_rename ' + @table + ' , ' + @newTable + CONVERT(varchar(2),@Inc)
exec(@sql)
SET @Inc = @Inc + 1;
select @sql
end`