Msg 156,级别 15,状态 1,第 16 行 关键字"IF"附近的语法不正确


-- --------------------------------------------------------
-- Host:                         192.168.62.245
-- Server version:               Microsoft SQL Server 2014 - 12.0.2000.8
-- Server OS:                    Windows NT 6.1 <X64> (Build 7601: ) (WOW64) (Hypervisor)
-- HeidiSQL Version:             9.5.0.5196
-- --------------------------------------------------------
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES  */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

-- Dumping database structure for mjDB
CREATE DATABASE IF NOT EXISTS "mjDB";
USE "mjDB";
-- Dumping structure for table mjDB.PushNotificationLog
CREATE TABLE IF NOT EXISTS "PushNotificationLog" (
    "pushNotificationLogId" INT(10,0) NOT NULL,
    "itemType" VARCHAR(20) NULL DEFAULT NULL,
    "itemId" INT(10,0) NULL DEFAULT NULL,
    "servicemanId" INT(10,0) NULL DEFAULT NULL,
    "title" VARCHAR(100) NULL DEFAULT NULL,
    "body" VARCHAR(4000) NULL DEFAULT NULL,
    "tranId" INT(10,0) NULL DEFAULT NULL,
    "createdBy" INT(10,0) NULL DEFAULT NULL,
    "createdDate" DATETIME(3) NULL DEFAULT NULL,
    PRIMARY KEY ("pushNotificationLogId")
);

我从HeidiSQL导出了这个更新到19/12/2017,当我尝试在SQL Server 2014上运行它时,我收到此错误:

Msg 156,级别 15,状态 1,第 16
行 关键字"IF"附近的语法不正确。

Msg 102,级别 15,状态 1,第 16
行 "mjDB"附近的语法不正确。

Msg 911,级别 16,状态 1,第 17
行 数据库"mjDB"不存在。确保正确输入名称。

如果您使用的是 SQL Server,则创建表语法是错误的。如果您希望在创建之前检查表是否存在,请像这样更改代码

IF object_id('PushNotificationLog') IS NULL
BEGIN
     CREATE TABLE [PushNotificationLog] 
     (
         pushNotificationLogId INT NOT NULL,
         itemType VARCHAR(20) NULL DEFAULT NULL,
         itemId INT NULL DEFAULT NULL,
         servicemanId INT NULL DEFAULT NULL,
         title VARCHAR(100) NULL DEFAULT NULL,
         body VARCHAR(4000) NULL DEFAULT NULL,
         tranId INT NULL DEFAULT NULL,
         createdBy INT NULL DEFAULT NULL,
         createdDate DATETIME NULL DEFAULT NULL,
         PRIMARY KEY (pushNotificationLogId)
    );
END

您还可以通过检查视图中是否存在来进行检查sys.tables

IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = 'PushNotificationLog')
BEGIN
END
同样,在

master.sys.databases 表中检查是否存在数据库

IF NOT EXISTS(SELECT 1 FROM master.sys.databases WHERE name = 'mjDB')
    BEGIN
    END

使用单引号 ('( 而不是双引号 ("(
从标识符(数据库名称、表名(中删除引号
将列名称中的引号替换为方括号 ([](

IF NOT EXISTS
(
    SELECT 1
    FROM [master].sys.databases
    WHERE [name] = 'mjDB'
)
    BEGIN CREATE DATABASE mjDB; END
GO
USE mjDB;
GO
-- Dumping structure for table mjDB.PushNotificationLog
IF (OBJECT_ID('dbo.PushNotificationLog', 'U') IS NULL)
    BEGIN
        CREATE TABLE dbo.PushNotificationLog
        (
            [PushNotificationLogID] INT NOT NULL
            , [ItemType] VARCHAR(20)
            , [ItemID] INT
            , [ServicemanID] INT
            , [Title] VARCHAR(100)
            , [Body] VARCHAR(4000)
            , [TranId] INT
            , [CreatedBy] INT
            , [CreatedDate] DATETIME
            , CONSTRAINT PK__PushNotificationLog PRIMARY KEY ([pushNotificationLogId])
        );
    END
GO

最新更新