Почему я не могу использовать переменную, чтобы назвать новую таблицу?T-SQL create table statement не принимает переменную
Как начинающийся проект SQL, я делаю личную базу данных финансов. Каждая учетная запись будет иметь соответствующую таблицу в базе данных. Существует также таблица, в которой перечислены все текущие учетные записи. См. (Упрощенный) пример кода ниже:
CREATE TABLE accountList
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Name] NCHAR(30) NOT NULL UNIQUE,
[Active] BIT NOT NULL
)
INSERT INTO accountList(name, active)
VALUES
('Bank_One_Checking', 1);
CREATE TABLE Bank_One_Checking
(
[Id] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[payee] NCHAR(30) NOT NULL UNIQUE,
[category] NCHAR(30) NOT NULL UNIQUE,
[amount] INT NOT NULL DEFAULT 0.00
)
Этот код работает. Я хочу установить имя учетной записи для переменной (поэтому ее можно передать как параметр хранимой процедуры). Смотрите ниже код:
DECLARE @accountName nchar(30);
SET @accountName = 'Bank_One_Savings';
INSERT INTO accountList(name, active)
VALUES
(@accountName, 1);
CREATE TABLE @accountName
(
[Id] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[payee] NCHAR(30) NOT NULL UNIQUE,
[category] NCHAR(30) NOT NULL UNIQUE,
[amount] INT NOT NULL DEFAULT 0.00
)
Line 6 в этом коде (CREATE TABLE @accountName) выдает ошибку
Неправильный синтаксис около @accountName, ожидая, 'ID', или 'QUOTEID' '' ,
Почему он не вставляет переменную в команду?
Динамический SQL будет работать, если ничего другого. – SteveCav
вы не можете использовать переменную для имен таблиц и столбцов, для чего вам нужно использовать динамический sql – Roy
Не делайте этого. Это плохой дизайн. Вот почему это трудно сделать. У вас должна быть таблица учетных записей и таблица транзакций: каждая строка таблицы транзакций должна ссылаться на Account.ID. – Blorgbeard