这两个T-SQL语句有什么区别?

Iai*_*der 4 t-sql

在工作中的SSIS包中,有一些SQL任务可以创建用于保存导入数据的登台表.所有陈述都采用以下形式:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.tbNewTable') AND type in (N'U'))
BEGIN
    TRUNCATE TABLE dbo.tbNewTable
END
ELSE
BEGIN
    CREATE TABLE dbo.tbNewTable (
        ColumnA VARCHAR(10) NULL,
        ColumnB VARCHAR(10) NULL,
        ColumnC INT NULL
    ) ON PRIMARY
END
Run Code Online (Sandbox Code Playgroud)

在Itzik Ben-Gan的T-SQL基础知识中,我看到了一种用于创建表的不同形式的语句:

IF OBJECT_ID('dbo.tbNewTable', 'U') IS NOT NULL
BEGIN
    DROP TABLE dbo.tbNewTable
END

CREATE TABLE dbo.tbNewTable (
    ColumnA VARCHAR(10) NULL,
    ColumnB VARCHAR(10) NULL,
    ColumnC INT NULL
) ON PRIMARY
Run Code Online (Sandbox Code Playgroud)

这些中的每一个似乎都做同样的事情.执行后,dbo架构中会有一个名为tbNewTable的空表.

这两者之间是否有任何实际或理论上的差异?他们可能会有什么影响?

hat*_*ica 6

第一个假设如果表存在,则它与它创建的列具有相同的列.第二个没有做出这个假设.因此,如果具有该名称的表恰好存在并且具有不同的列集,则两者将具有非常不同的结果.