创建一个表,其中当前日期附加到Azure中的表名

时间:2015-08-18 18:01:06

标签: sql-server azure azure-sql-database procedure

我知道这是一种可怕的做法,但这就是我的要求。此程序将每月执行一次,但可能会发生变化。我需要新表名的格式为staff.20150818 staff.yyyymmdd。当我运行我的程序时,表名是@currentDate而不是我需要它。在SQL Azure中,我不能使用PREPARE,这是我找到的许多解决方案中的一个因素。这是我一直在研究的代码:

BEGIN
DECLARE @currentDate varchar(500);
SET @currentDate = 'staff.' +(CONVERT(VARCHAR(8),GETDATE(),3));

 CREATE TABLE [dbo].[@currentDate] (
 [staffID] int identity(1,1) primary key,
 [firstName] nvarchar(35),
 [lastName] nvarchar(35),
 [positionTitle] nvarchar(45),
 [leaID] nvarchar(15),
 [schoolID] nvarchar(15),
 [phoneNumber] nvarchar(24),
 [email] nvarchar(128),
 [username] nvarchar(20),
 [password] nvarchar(max),
 [code1] nvarchar(5),
 [code2] nvarchar(5),
 [date_created] datetime2(7),
 [date_updated] datetime2(7)
) INSERT INTO [@currentDate](firstName, lastName, positionTitle, leaID, schoolID, phoneNumber, email, username, password, code1, code2)
  SELECT firstName, lastName, positionTitle, leaID, schoolID, phoneNumber, email, username, password, code1, code2
  FROM Staff

END

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用动态SQL? 这样的事情应该有效:

 EXECUTE sp_executesql 
 N'CREATE TABLE [dbo].[@currentDate] (
 [staffID] int identity(1,1) primary key,
 ...',
 N'@currentDate varchar(500)',
 @currentDate = 'staff.' +(CONVERT(VARCHAR(8),GETDATE(),3))

sp_executesql

上的文档

答案 1 :(得分:1)

您只需使用动态SQL,将您的SQL语句Concat转换为字符串,包括将日期时间转换为varchar,然后在其上调用EXEC或sp_executeSql。

您不能将表名作为变量传递给sp_executeSql;你需要在@sql字符串中解决它。