Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将某些表重命名为表名+;ddmmyyy_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 将某些表重命名为表名+;ddmmyyy

Sql server 将某些表重命名为表名+;ddmmyyy,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我每天晚上都从一台SQL Server向另一台SQL Server导入一些表,并且该表的目标位置应该有一个DDMMYYYYsufix。我想不出在导入过程中更改名称的方法,并想在导入后重命名它。我也被困在这里了,因为我无法让SP_RENAME以SP_RENAME'TABLE_NAME''TABLE_NAME+DDMMYYYY'的格式工作。首先,听起来你真的应该在一个表上加载这些表,并使用另一列存储日期。尽管如此,您还是可以使用动态SQL来满足您的需求: DECLARE @Date NVARCHAR

我每天晚上都从一台SQL Server向另一台SQL Server导入一些表,并且该表的目标位置应该有一个
DDMMYYYY
sufix。我想不出在导入过程中更改名称的方法,并想在导入后重命名它。我也被困在这里了,因为我无法让
SP_RENAME
SP_RENAME'TABLE_NAME''TABLE_NAME+DDMMYYYY'
的格式工作。首先,听起来你真的应该在一个表上加载这些表,并使用另一列存储日期。尽管如此,您还是可以使用动态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。

首先,听起来您应该将这些表加载到一个表中,并使用另一列存储日期。尽管如此,您还是可以使用动态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。

在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
生成的输出/脚本示例(
消息面板
):


现在,执行此脚本(
Ctrl+C
Ctrl+V
F5
)。

在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
生成的输出/脚本示例(
消息面板
):


现在,执行此脚本(
Ctrl+C
Ctrl+V
F5
)。

您是否考虑过添加一个日期列并将所有数据保留在一个表中,而不是每天复制表?当数据被拆分到多个表中时,查询变得很困难。您是否考虑过添加一个日期列并将所有数据保留在一个表中,而不是每天复制表?当数据被拆分到多个表中时,查询变得很困难。谢谢!!这就是我要找的。这符合我的要求,我可以在没有任何手动干预的情况下自动运行整个程序。@nirajkumar:在这种情况下,一个更简单的解决方案是:
EXEC sp_重命名“MySchema.OldTableName”、“NewTableName20130722”、“OBJECT”
?@bogdansahelan?,这将是一个更简单的解决方案,可以对日期进行硬编码,但事实并非如此asked@Lamak:+1是的。同意。谢谢!!这就是我要找的。这符合我的要求,我可以在没有任何手动干预的情况下自动运行整个程序。@nirajkumar:在这种情况下,一个更简单的解决方案是:
EXEC sp_重命名“MySchema.OldTableName”、“NewTableName20130722”、“OBJECT”
?@bogdansahelan?,这将是一个更简单的解决方案,可以对日期进行硬编码,但事实并非如此asked@Lamak:+1是的。同意。