bugfix> sql-server > 投稿

以下のクエリを実行すると、ステートメントは出力されますが、次のエラーがスローされます。

Process failed: Incorrect syntax near ')'

コード:

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
          WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'Table_1')
    DELETE [dbo].[Table_1] 
    WHERE [UPDATED_DATE] <= DATEADD(dd, -90,'2018.02.23')
UPDATE DBO.T_REF_MASTER 
SET LAST_PURGE_DATE = GETDATE() 
WHERE TABLE_NAME = 'Table_1'

誰かが個々のステートメントを1つずつ実行すると完全に実行されるため、なぜそのエラーがスローされるのかを説明できますか?

--Query
DECLARE @SQL VARCHAR(MAX)
DECLARE @S VARCHAR(MAX)
DECLARE @SQLExist VARCHAR(MAX)
DECLARE @db VARCHAR(10) = 'dbo'
DECLARE @TABLE_NAME VARCHAR(200) = 'Table_1'
DECLARE @NO_OF_DAYS VARCHAR(10) = '90'
DECLARE @LAST_PURGE_DATE VARCHAR(50) = '2018-02-22 10:46:49.953'
SET @SQLExist = 'IF EXISTS((SELECT 1 FROM 
INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''' 
                        + @db + ''' AND TABLE_NAME = ''' + @TABLE_NAME + 
''')' 
               --PRINT @SQLExist 
               SET @SQL = 'DELETE [' + @db + '].[' + @TABLE_NAME
                         + '] where [UPDATED_DATE] <= DATEADD(dd, -'
                         + CONVERT(VARCHAR,@NO_OF_DAYS) + ',''' + 
                         + CONVERT(VARCHAR,@LAST_PURGE_DATE, 102) + ''')'
              --PRINT @SQL
              SET @S = 'UPDATE DBO.T_REF_MASTER SET LAST_PURGE_DATE = 
getdate() WHERE TABLE_NAME = '
                       + '''' + CONVERT(VARCHAR, @TABLE_NAME) + ''');'
PRINT @SQLExist
print @SQL
PRINT @S

回答 2 件
  • 開始カッコが2つ表示されます-((--EXISTSの後ですが、@ TABLE_NAMEの後は1つだけ閉じます。

  • はい、ジョージに同意しました。それらの括弧を削除しました。新しいクエリは次のとおりです。

    --Query
    DECLARE @SQL VARCHAR(MAX)
    DECLARE @S VARCHAR(MAX)
    DECLARE @SQLExist VARCHAR(MAX)
    DECLARE @db VARCHAR(10) = 'dbo'
    DECLARE @TABLE_NAME VARCHAR(200) = 'Table_1'
    DECLARE @NO_OF_DAYS VARCHAR(10) = '90'
    DECLARE @LAST_PURGE_DATE VARCHAR(50) = '2018-02-22 10:46:49.953'
    SET @SQLExist = 'IF EXISTS(SELECT 1 FROM 
    INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''' 
                        + @db + ''' AND TABLE_NAME = ''' + @TABLE_NAME + 
    ''')' 
               --PRINT @SQLExist 
               SET @SQL = 'DELETE [' + @db + '].[' + @TABLE_NAME
                         + '] where [UPDATED_DATE] <= DATEADD(dd, -'
                         + CONVERT(VARCHAR,@NO_OF_DAYS) + ',''' + 
                         + CONVERT(VARCHAR,@LAST_PURGE_DATE, 102) + ''')'
              --PRINT @SQL
              SET @S = 'UPDATE DBO.T_REF_MASTER SET LAST_PURGE_DATE = 
    getdate() WHERE TABLE_NAME = '
                       + '''' + CONVERT(VARCHAR, @TABLE_NAME) + ''''
    PRINT @SQLExist
    print @SQL
    PRINT @S
    
    

    まだ「)」の近くの構文エラーを吐き出している

あなたの答え