在 Azure 中创建一个 table 并将当前日期附加到 table 名称
Create a table with current date appended to table name in Azure
我知道这是一种糟糕的做法,但这是我被要求的。该程序大约每月执行一次,但可能会发生变化。我需要新 table 名称的格式为 staff.20150818
,即 staff.yyyymmdd
。当我 运行 我的程序时, table 名称是 @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
您尝试过使用动态 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))
的文档
你只需要使用动态SQL,将你的SQL语句连接成一个字符串,包括将日期时间转换为varchar,然后调用EXEC或sp_executeSql就可以了。
您不能将 table 名称作为变量传递给 sp_executeSql;您需要已经在 @sql 字符串中解决了这个问题。
我知道这是一种糟糕的做法,但这是我被要求的。该程序大约每月执行一次,但可能会发生变化。我需要新 table 名称的格式为 staff.20150818
,即 staff.yyyymmdd
。当我 运行 我的程序时, table 名称是 @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
您尝试过使用动态 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))
的文档
你只需要使用动态SQL,将你的SQL语句连接成一个字符串,包括将日期时间转换为varchar,然后调用EXEC或sp_executeSql就可以了。
您不能将 table 名称作为变量传递给 sp_executeSql;您需要已经在 @sql 字符串中解决了这个问题。