是否可以在没有列的情况下在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列创建。
有什么建议吗?
[编辑] 更多背景。有些表存在,有些表没有。有些列存在,有些则没有。我想创建一个脚本,可以随时执行而不会破坏或导致错误消息,就像表/列已经存在一样。
答案 0 :(得分:1)
此代码
create table tab
引发错误
'tab'附近的语法不正确。
和此代码
create table tab1
(
id int
)
alter table tab1 drop id
引发错误
ALTER TABLE'tab1'失败。删除表中的所有列不是 允许的。
所以没有列的表是不可能的。
答案 1 :(得分:0)
当然你不能在SQL Server中创建没有列的表,但是如果在创建表之前它不存在,那么它没有任何列,那你为什么不简单地创建它?
如果这是一种升级脚本,您可以执行ELSE分支,在添加它之前检查每个列。
答案 2 :(得分:0)
我认为您可以使用以下内容实现您正在尝试的内容:
使用ID创建表,并且只检查是否存在Id
列,如果您不必创建表。
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)
END
ELSE
BEGIN
if NOT EXISTS (select column_name from INFORMATION_SCHEMA.columns where table_name = 'Tags' and column_name = 'Id')
BEGIN
alter table [dbo].Tags add MyColumn int IDENTITY(1,1) NOT NULL
-- add new primary key constraint on new column
ALTER TABLE dbo.Tags
ADD CONSTRAINT PK_Tags
PRIMARY KEY CLUSTERED ([Id] ASC)
END
ELSE
GO