我对建议用于检查表是否存在的代码感到有点困惑。 有人可以解释我写的代码是否可用于检查表是否存在?
如果表存在,我希望它什么都不做。
这是我的代码:
BEGIN
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX);
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N' + @TABLENAME + ') AND type in (N'U'))
BEGIN
SET @SQL =
N'CREATE TABLE ' + @TABLENAME + '
('
+ '[ID] [int] IDENTITY(1,1) NOT NULL,
[intID] [int] NULL,
[varID] [varchar](50) NULL,
[FormName] [varchar](250) NULL,
[UID] [varchar](3) NOT NULL,
CONSTRAINT [PK_Selections' + @TABLENAME + '_1] PRIMARY KEY CLUSTERED(
[ID]));';
EXEC sp_executesql @sql;
END
END
我忘了提到目前程序 DOES 创建表格。但是,当我再次运行该过程时,它会再次尝试创建表,然后失败。
如果表存在,如何退出程序?
答案 0 :(得分:6)
只需做这个简单的检查。无需查询sys.objects
...
IF OBJECT_ID(@TABLENAME, 'U') IS NULL
BEGIN
您的检查失败,因为您实际上正在寻找名为“+ @TABLENAME +
”
答案 1 :(得分:1)
以下是检查表是否存在:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N' + @TABLENAME + ') AND type in (N'U'))
table sys.objects包含数据库中所有对象的描述。
Function OBJECT_ID() - 按名称返回对象的id。
输入(N' U')) - 检查该对象是否由用户创建。
要检查该表是否为EXISTS,请使用检查:
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N' + @TABLENAME + ') AND type in (N'U'))
BEGIN
...
END
答案 2 :(得分:1)
试试这个:
IF NOT EXISTS(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE
TABLE_NAME=LTRIM(RTRIM(@TABLENAME )) AND TABLE_TYPE='BASE TABLE'
BEGIN
-- CREATE YOUR TABLE
END