使用存储过程重新命名和重新创建MS-SQL表的过程是什么?

使用存储过程重新命名和重新创建MS-SQL表的过程是什么?,sql,sql-server,Sql,Sql Server,我有一个名为myTable的表,其中正在进行连续插入。我将根据myTable\u Date重命名该表,并通过存储过程创建一个新表myTable 我想知道在重新命名和重新创建表的过程中会发生什么,它会丢弃任何数据包吗?如果您只想更改表的名称,SQL Server内置了sp\u rename sp\u重命名myTable,myTable\u日期 将名称从myTable更改为myTable\u Date 但它只会更改sys.Objects中的名称引用,因此请确保所有引用都已更改,并阅读有关它的文档:)

我有一个名为
myTable
的表,其中正在进行连续插入。我将根据
myTable\u Date
重命名该表,并通过存储过程创建一个新表
myTable


我想知道在重新命名和重新创建表的过程中会发生什么,它会丢弃任何数据包吗?

如果您只想更改表的名称,SQL Server内置了
sp\u rename

sp\u重命名myTable,myTable\u日期

将名称从
myTable
更改为
myTable\u Date

但它只会更改sys.Objects中的名称引用,因此请确保所有引用都已更改,并阅读有关它的文档:)


如果您只想更改表的名称,则Microsoft doc for it

SQL Server内置了
sp\u rename

sp\u重命名myTable,myTable\u日期

将名称从
myTable
更改为
myTable\u Date

但它只会更改sys.Objects中的名称引用,因此请确保所有引用都已更改,并阅读有关它的文档:)


它的Microsoft文档是

当您将myTable重命名为myTableDate时,myTable将不再存在,因此如果有人试图在myTable中插入内容,它将失败

当您使用相同的名称和列创建新的myTable时,一切都将正常,插入过程将继续

我建议您编写一个小脚本来重命名表并创建一个新表。大概是这样的:

sp_rename myTable, myTable_Date

GO

CREATE TABLE myTable(
-- Table definition
)
当您重命名表时,您将得到如下警告:“警告:更改对象名称的任何部分都可能破坏脚本和存储过程。”因此,您最好快速创建新表


另一个选项是创建一个与myTable完全相同的表,并在其中插入myTable中的所有数据,然后可以从myTable中删除这些数据。不重命名、不拖放和插入过程不会中断。

将myTable重命名为myTableDate时,myTable将不再存在,因此如果有人试图在myTable中插入内容,则会失败

当您使用相同的名称和列创建新的myTable时,一切都将正常,插入过程将继续

我建议您编写一个小脚本来重命名表并创建一个新表。大概是这样的:

sp_rename myTable, myTable_Date

GO

CREATE TABLE myTable(
-- Table definition
)
当您重命名表时,您将得到如下警告:“警告:更改对象名称的任何部分都可能破坏脚本和存储过程。”因此,您最好快速创建新表

另一个选项是创建一个与myTable完全相同的表,并在其中插入myTable中的所有数据,然后可以从myTable中删除这些数据。不重命名、不拖放和插入过程不会中断

我想知道在重新命名和重新创建 桌子,它会掉包吗

在重新创建表之前,重命名表后尝试的插入将出错。您可以通过在事务中执行任务来避免这种情况。如果在提交事务之前尝试插入,但不会丢失任何行,则会发生短期阻塞。例如:

CREATE PROC dbo.ReanmeMytableWithDate
AS
DECLARE @NewName sysname = 'mytable_' + CONVERT(nchar(8), SYSDATETIME(), 112);
SET XACT_ABORT ON;
BEGIN TRY;
    BEGIN TRAN;
    EXEC sp_rename N'dbo.mytable', @NewName;
    CREATE TABLE dbo.mytable(
        col1 int
    );
    COMMIT;
END TRY
BEGIN CATCH
    THROW;
END CATCH;
GO
我不知道您这样重命名表的用例,但似乎表分区可能是一种更好的方法,正如@Damien_不信教者所建议的那样。虽然表分区以前需要Enterprise Edition,但从SQL Server 2016 SP1以及Azure SQL数据库开始,该功能在标准版中可用

我想知道在重新命名和重新创建 桌子,它会掉包吗

在重新创建表之前,重命名表后尝试的插入将出错。您可以通过在事务中执行任务来避免这种情况。如果在提交事务之前尝试插入,但不会丢失任何行,则会发生短期阻塞。例如:

CREATE PROC dbo.ReanmeMytableWithDate
AS
DECLARE @NewName sysname = 'mytable_' + CONVERT(nchar(8), SYSDATETIME(), 112);
SET XACT_ABORT ON;
BEGIN TRY;
    BEGIN TRAN;
    EXEC sp_rename N'dbo.mytable', @NewName;
    CREATE TABLE dbo.mytable(
        col1 int
    );
    COMMIT;
END TRY
BEGIN CATCH
    THROW;
END CATCH;
GO

我不知道您这样重命名表的用例,但似乎表分区可能是一种更好的方法,正如@Damien_不信教者所建议的那样。虽然表分区以前需要Enterprise Edition,但从SQL Server 2016 SP1以及Azure SQL数据库开始,该功能在标准版中可用。

而不是手动尝试实现分区,您应该研究产品中内置的支持它的功能。我将使用Scheduler每月或每周执行此操作。我不知道该使用哪种功能请帮助我除了手动尝试实现分区之外,您还应该查看产品中内置的支持分区的功能。我将使用Scheduler每月或每周执行此操作。我不知道使用哪种功能,请帮助我