【发布时间】:2013-09-21 05:26:51
【问题描述】:
是否可以只在 MSSQL 中创建没有列的表?
我问这个是因为我必须检查每一列是否已经存在。
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Tags]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].Tags(
[Id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Tags] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO
如果表和列已存在,则创建列 Id 可能会中断执行。
理想情况下:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Tags]') AND type in (N'U'))
CREATE TABLE [dbo].Tags
GO
if NOT EXISTS (select column_name from INFORMATION_SCHEMA.columns where table_name = 'Tags' and column_name = 'Id')
alter table MyTable add MyColumn int IDENTITY(1,1) NOT NULL
GO
-- add new primary key constraint on new column
ALTER TABLE dbo.Tags
ADD CONSTRAINT PK_Tags
PRIMARY KEY CLUSTERED ([Id] ASC)
GO
我在第二段代码中找不到示例。但我可以想象不能用 0 列创建一个表。
有什么建议吗?
[编辑] 更多的上下文。有些表存在有些不存在。有些列存在有些不存在。我想创建一个可以随时执行的脚本,而不会破坏或导致错误消息,例如表/列已经存在。
【问题讨论】:
-
不要编写即时创建表的代码?
-
问题写得不好。应该有更多的细节。您是在寻找没有列的表,还是在列不存在的情况下在表上创建列?
-
很遗憾,这是不可能的。 SQL 语言在很多地方都达不到您对真正基于 Set 的语言的期望(即空集很有趣,但 SQL 不允许表或键具有空列集)
-
我编辑了我的帖子以获得更多背景信息。但是阅读回复,这是不可能的,对吧?
标签: sql sql-server sql-server-2012