【问题标题】:SQL Server stored procedure INSERT INTOSQL Server 存储过程 INSERT INTO
【发布时间】:2018-10-29 18:42:49
【问题描述】:

我有一个存储过程,如果该表存在,它应该将数据插入到表中。这部分代码在ELSE BEGIN ... END 语句中。我收到一个错误,指出 OBJECT 已经存在...

我的代码如下:

IF NOT EXISTS(SELECT TOP 1 * FROM SYSOBJECTS 
              WHERE name = 'smsdss.c_order_utilization_lihn_svc_w_order_dept_desc_bench' 
                AND xtype = 'U')
BEGIN
    CREATE TABLE SCHEMA.MY_TABLE ()
END
ELSE BEGIN
    DECLARE @TODAY_B DATE;
    DECLARE @START_B DATE;
    DECLARE @END_B   DATE;

    SET @TODAY_B = GETDATE();
    SET @START_B = DATEADD(YEAR, DATEDIFF(YEAR, 0, @TODAY_B) -1, 0);
    BLAH BLAH BLAH

    INSERT INTO SCHEMA.MY_TABLE
        SELECT 
            COLUMN_A,
            COLUMN_B, 
            ..... ,
            COLUMN_N
        FROM 
            #TEMP_B
        WHERE 
            ORDER_YEAR > (SELECT MAX(ZZZ.ORDER_YEAR) FROM SCHEMA.MY_TABLE)
END

【问题讨论】:

  • 请包括包含IF语句的一行
  • 该错误表明代码在 CREATE TABLE 脚本上失败(在 IF 块内,而不是在 ELSE 内)。可能您的 SELECT 语句不正确。
  • 如果表存在,它应该转到 else 开始...否?
  • 试试这个并仔细检查架构和表名:IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'smsdss' AND TABLE_NAME = 'c_order_utilization_lihn_svc_w_order_dept_desc_bench')
  • ...发现错误...在我的 if 语句中。我从名称参数中取出了架构,它工作正常。

标签: sql-server tsql sql-server-2014


【解决方案1】:

错误表明代码在IF 块内的CREATE TABLE 脚本上失败,不是 ELSE。可能您的 SELECT 声明不正确。

您可以解决此问题或尝试此方法,然后仔细检查架构和表名

IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'smsdss' AND TABLE_NAME = 'c_order_utilization_lihn_svc_w_order_dept_desc_bench')
BEGIN
....

【讨论】:

    【解决方案2】:

    您也可以使用 OBJECT_ID() 作为

    IF OBJECT_ID('SCHEMA.MY_TABLE') IS NULL
    BEGIN
      CREATE TABLE ...
    END
      ELSE
        BEGIN
          INSERT ..
        END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 2016-06-15
      • 1970-01-01
      • 2012-01-23
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多