如果sql表存在,则创建

如果sql表存在,则创建,sql,Sql,这个问题以前已经回答过很多次了,但是当我使用代码时,我得到一个错误: “')附近的语法不正确 我的代码 IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'control_forecastscenario' AND TABLE_SCHEMA = 'rvfc') BEGIN CREATE TABLE

这个问题以前已经回答过很多次了,但是当我使用代码时,我得到一个错误:

“')附近的语法不正确

我的代码

IF NOT EXISTS (SELECT *
               FROM INFORMATION_SCHEMA.TABLES
               WHERE TABLE_NAME = 'control_forecastscenario'
                 AND TABLE_SCHEMA = 'rvfc')
BEGIN
    CREATE TABLE [rvfc].[control_forecastscenario]
    (
        [Scenario] [varchar](255) NULL,
        [Active] [varchar](255) NULL
    ) ON [PRIMARY]
错误在第4行

AND TABLE_SCHEMA = 'rvfc')

作为一个查询,您发布的语法非常有效。您在帖子中没有将
END
包含到
BEGIN
块中,但我们知道这不是问题所在,因为错误消息中可能有不同的行号

以下单个表达式将起作用:
(我喜欢缩进开头,但这对执行没有影响)

还要注意,我省略了[PRIMARY]上的
,因为如果您没有管理多个文件组,那么最好不要在代码库中包含对它们的引用

重新创建错误的唯一方法是尝试将其作为单独的批处理调用执行。如果您的业务逻辑正在分块或逐行执行脚本,或者您以某种方式以批处理终止符(如
GO
)的方式构建查询,则可能会发生这种情况已注入到脚本中

以下内容将创建您的错误

IF NOT EXISTS (SELECT *
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  TABLE_NAME = 'control_forecastscenario'
    AND TABLE_SCHEMA = 'rvfc')
味精102,第15级,状态1,第4行
“')附近的语法不正确

如果在原始脚本中插入一个类似冒号,则会发生相同的错误

IF NOT EXISTS (SELECT *
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  TABLE_NAME = 'control_forecastscenario'
    AND TABLE_SCHEMA = 'rvfc')
;
BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
    [Scenario] [varchar](255) NULL,
    [Active] [varchar](255) NULL
    )
END

在处理一些其他注释时,这里不讨论模式
rvfc
的存在,也不讨论其他常见语法问题,因为它们会引发如下不同的错误消息:

Msg 2760,第16级,状态1,第7行
指定的架构名称“rvfc”不存在或您没有使用它的权限

如果执行此语句,省略
END
,您将看到不同的行号,但相同的消息:

IF NOT EXISTS (SELECT *
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  TABLE_NAME = 'control_forecastscenario'
    AND TABLE_SCHEMA = 'rvfc') BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
    [Scenario] [varchar](255) NULL,
    [Active] [varchar](255) NULL
    )
Msg 102,15级,状态1,第8行 “')附近的语法不正确

消息是相同的,因为
BEGIN
块需要用
END
关闭,这使得整个
BEGIN
块无效。因此,
是脚本中最后一个有效字符,因此SQL不能在这里报告错误


请发布正在执行脚本的代码以获得进一步帮助,否则此帖子应关闭为不可复制


看起来您需要用and END语句结束BEGIN块。否则,该语句对我来说运行良好。当然,您需要创建您的rvfc模式beforehand@RexHenderson谢谢你快速提问你认为这种方法或结合触发器更合适吗我不清楚你的目标是什么,但尽可能远离触发器。OP澄清他的目标时,我会提供一个更好的答案。谢谢
IF NOT EXISTS (SELECT *
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  TABLE_NAME = 'control_forecastscenario'
    AND TABLE_SCHEMA = 'rvfc')
;
BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
    [Scenario] [varchar](255) NULL,
    [Active] [varchar](255) NULL
    )
END
IF NOT EXISTS (SELECT *
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  TABLE_NAME = 'control_forecastscenario'
    AND TABLE_SCHEMA = 'rvfc') BEGIN
CREATE TABLE [rvfc].[control_forecastscenario](
    [Scenario] [varchar](255) NULL,
    [Active] [varchar](255) NULL
    )