T-SQL create table语句将不接受变量
为什么不能使用变量来命名新表 作为一个开始的SQL项目,我正在制作一个个人财务数据库。每个帐户在数据库中都有一个对应的表。还有一个表格列出了所有的活期账户。请参见下面的(简化)代码示例:T-SQL create table语句将不接受变量,sql,sql-server,tsql,Sql,Sql Server,Tsql,为什么不能使用变量来命名新表 作为一个开始的SQL项目,我正在制作一个个人财务数据库。每个帐户在数据库中都有一个对应的表。还有一个表格列出了所有的活期账户。请参见下面的(简化)代码示例: CREATE TABLE accountList ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] NCHAR(30) NOT NULL UNIQUE, [Active] BIT NOT NULL ) INSERT INTO accoun
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
)
代码中的第6行(CREATE TABLE@accountName)产生了一个错误
@accountName附近的语法不正确,应为“.”、“ID”或“QUOTEID”
为什么它不将变量插入命令?这太长了,无法添加注释 SQL不允许表成为变量。如果愿意,您可以使用动态SQL,但我强烈建议您不要使用它 您的代码有几个缺陷。你不仅要学会修正它们,还要学会为什么它们错了
- 您需要一个“主”表,其中
是一列。具有相同结构的多个表几乎总是数据库设计不佳的标志AccountName
- 字符串应使用
或VARCHAR()
进行设计,除非它们很短或已知长度相同(例如帐户号码始终为15个字符)。固定长度的字符串只会浪费空间NVARCHAR()
- 我发现名为
的列在这样的表中不太可能是唯一的。这似乎违背了独特性的含义category
- 在世界上大多数地方,整数不适用于货币金额(使用
或十进制
)。而且,它们不应该初始化为带有小数点的常量货币
- 您需要一个“主”表,其中
是一列。具有相同结构的多个表几乎总是数据库设计不佳的标志AccountName
- 字符串应使用
或VARCHAR()
进行设计,除非它们很短或已知长度相同(例如帐户号码始终为15个字符)。固定长度的字符串只会浪费空间NVARCHAR()
- 我发现名为
的列在这样的表中不太可能是唯一的。这似乎违背了独特性的含义category
- 在世界上大多数地方,整数不适用于货币金额(使用
或十进制
)。而且,它们不应该初始化为带有小数点的常量货币
- 这篇评论太长了
SQL不允许表成为变量。如果愿意,您可以使用动态SQL,但我强烈建议您不要使用它
您的代码有几个缺陷。你不仅要学会修正它们,还要学会为什么它们错了