在程序中如何判断一个数据库表是否存在

在程序中,有时候可能需要动态创建数据库表,但在创建之前需要先判断这个表是否存在。

1. 方法一,用如下的一个sql语句搞定:

SELECT count(*) as tbexist FROM sys.tables WHERE name = 'TableName'

不管要检测的表 TableName 是否存在,这条语句都会有一条记录出现,而且只有一列,列名为 tbexist。如果表 TableName 存在,则这条记录的值就是1,否则就是0

以上就是我自己检测已经创建的一个表,结果显示为1.

2. 方法二,如果sql语句改成如下的样子:

SELECT * FROM sys.tables WHERE name = 'TableName'

则如果指定的表TableName存在,就会有一条记录,如下所示:

如果表不存在,则记录为空:

这两种方法都可以,本质上一样的

3. 如果表不存在,则创建它

如下为一个示例:

declare @tabName as VARCHAR(32);
set @tabName = 'tb2';

IF (SELECT count(*) as tbexist FROM sys.tables WHERE name = @tabName) = 1
BEGIN
    print 'this is ok';
    RETURN;
END
ELSE
BEGIN
    print 'this is NOT exist, now will create the table ' + @tabName;
END

/*这里不能直接把表名传递到CREATE TABLE命令中,只能采用字符串的方式,通过sp_executesql存储过程来执行*/
declare @sqlstring as NVARCHAR(1024);
SET @sqlstring = 'CREATE TABLE [dbo].[' + @tabName + ']( \
    [ID] [int] IDENTITY(1,1) NOT NULL, \
    [type] [smallint] NOT NULL, \
    [valstr] [nvarchar](512) NOT NULL, \
    [valnum] [int] NOT NULL, \
    [tdesc] [nvarchar](512) NOT NULL, \
    [timein] [datetime] NOT NULL \
) ON [PRIMARY]';

EXEC sp_executesql @sqlstring;

以上示例判断如果表tb2不存在,就进行创建,且打印一条信息:this is NOT exist, now will create the table tb2,否则直接返回,在返回之前打印:this is ok

需要注意的是,在后面创建表的时候,不能像下面这样:

CREATE TABLE [dbo].[@tabName](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [type] [smallint] NOT NULL,
    [valstr] [nvarchar](512) NOT NULL,
    [valnum] [int] NOT NULL,
    [tdesc] [nvarchar](512) NOT NULL,
    [timein] [datetime] NOT NULL
) ON [PRIMARY]

而是要把这个创建表的语句放到字符串中,然后通过存储过程来执行它,否则创建出来的表名就是 @tabName,也就是这个变量无法被直接传递给CREATE TABLE命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值