代码之家  ›  专栏  ›  技术社区  ›  Rilcon42

备份表的动态变量名

  •  1
  • Rilcon42  · 技术社区  · 6 年前

    我正试图编写一个存储过程来备份表,但我一直在得到:

    msg 402,16级,状态1,第9行 添加运算符中的数据类型varchar和datetime2不兼容。

    MSG 402,16级,状态1,第15行 添加运算符中的数据类型varchar和datetime2不兼容。

    我怎么修这个?

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    DECLARE @CreateDynamicSQL nvarchar(1000);
    DECLARE @CopyDynamicSQL nvarchar(1000);
    
    SET @CreateDynamicSQL='CREATE TABLE [dbo].[paul_AccountContact_Backup_'+@SYSDATETIME+'](
        [AccountID] [int] NOT NULL,
        [ContactID] [int] NOT NULL
    ) ON [PRIMARY]
    GO'
    
    SET @CopyDynamicSQL='select * into [dbo].[paul_AccountContact_Backup_'+@SYSDATETIME+'] from paul_AccountContacts'
    
    EXEC(@CreateDynamicSQL);
    EXEC(@CopyDynamicSQL);
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   MJH    6 年前

    必须将日期变量转换为字符串,以便将其连接:

    SET @CreateDynamicSQL='CREATE TABLE [dbo].[paul_AccountContact_Backup_' 
    + convert(varchar(20), @SYSDATETIME, <Format>) + '](
    

    格式参数的文档:
    https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017