我每天晚上将一些表从一个 SQL Server 导入到另一个,并且该表DDMMYYYY
在目的地应该有一个后缀。我想不出在导入过程中更改名称的方法,并想在导入后重命名。我也被困在这里,因为我无法以SP_RENAME
这种格式工作SP_RENAME 'TABLE_NAME' 'TABLE_NAME+DDMMYYYY'
。
问问题
2302 次
2 回答
2
在 SQL Server Management Studio 中执行此脚本(Ctrl+T
(文本输出)、F5
(执行))以生成另一个T-SQL
脚本:
SET NOCOUNT ON;
GO
DECLARE @StartDate DATETIME,@EndDate DATETIME;
SELECT @StartDate='2013-07-10T00:00:00',
@EndDate='2013-07-23T00:00:00';
PRINT 'BEGIN TRANSACTION;'
SELECT 'EXEC sp_rename '
+''''
+QUOTENAME(s.name)+'.'+QUOTENAME(t.name)
+''','''
+QUOTENAME(t.name+STUFF(STUFF(CONVERT(VARCHAR(25),t.create_date,103),3,1,''),5,1,''))
+''', ''OBJECT'''
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id=s.schema_id
WHERE t.create_date BETWEEN @StartDate AND @EndDate
--AND t.name LIKE '%pattern%'
PRINT 'ROLLBACK;'
PRINT '-- COMMIT;'
SET NOCOUNT OFF;
GO
生成的示例输出/脚本 ( Message panel
):
BEGIN TRANSACTION;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EXEC sp_rename '[dbo].[NodesOrder]','[NodesOrder19072013]'
EXEC sp_rename '[dbo].[RateTable]','[RateTable19072013]'
EXEC sp_rename '[dbo].[A]','[A22072013]'
EXEC sp_rename '[dbo2].[A]','[A22072013]'
EXEC sp_rename '[dbo].[ConstraintTest]','[ConstraintTest17072013]'
ROLLBACK;
-- COMMIT;
现在,执行这个脚本(Ctrl+C
, Ctrl+V
, F5
)。
于 2013-07-22T19:31:47.070 回答
2
好吧,首先,听起来您应该将这些表加载到一个表上并使用另一列来存储日期。不过,您可以根据需要使用动态 SQL:
DECLARE @Date NVARCHAR(8), @Table NVARCHAR(500), @Query NVARCHAR(2000)
SELECT @Date = CONVERT(VARCHAR(8),GETDATE(),112)
SET @Table = 'TABLE_NAME'
SET @Query = 'EXEC sp_rename '''+@Table+''','''+@Table+@Date+''''
EXEC(@Query)
哦,看看这个链接,了解 SQL Server 上的动态 SQL。
于 2013-07-22T19:09:27.573 回答