2017-06-01 44 views
0

我有一个SQL Server作业定义如下,但它在执行时显示错误。请帮助理清问题IF ELSE在SQL Server作业中的声明

-- First clear out the destination table fast and easy without 
TRUNCATE TABLE [etimetracklite1].[dbo].[devicelogs]; 

-- Create table 
DECLARE @tablename AS nvarchar(14); 
DECLARE @yearnam AS nvarchar(4); 
DECLARE @tabnam AS nvarchar(18); 

IF MONTH(GETDATE()) = 1 
BEGIN 
    SET @tablename = [devicelogs_1_] 
END 
ELSEIF MONTH(GETDATE()) = 2 
BEGIN 
    SET @tablename = '[devicelogs_2_] 
END 
ELSEIF MONTH(GETDATE()) = 3 
BEGIN 
    SET @tablename = [devicelogs_3_] 
END 
ELSEIF MONTH(GETDATE()) = 4 
BEGIN 
    SET @tablename = [devicelogs_4_] 
END 
ENDIIF MONTH(GETDATE()) = 5 
BEGIN 
    SET @tablename = [devicelogs_5_] 
END 
ELSEIF MONTH(GETDATE()) = 6 
BEGIN 
    SET @tablename = [devicelogs_6_] 
END 
ELSEIF MONTH(GETDATE()) = 7 
BEGIN 
    SET @tablename = [devicelogs_7_] 
END 
ELSEIF MONTH(GETDATE()) = 8 
BEGIN 
    SET @tablename = [devicelogs_8_] 
END 
ELSEIF MONTH(GETDATE()) = 9 
BEGIN 
    SET @tablename = [devicelogs_8_] 
END 
ELSEIF MONTH(GETDATE()) = 10 
BEGIN 
    SET @tablename = [devicelogs_10_] 
END 
ELSEIF MONTH(GETDATE()) = 11 
BEGIN 
    SET @tablename = [devicelogs_11_] 
END 
ELSEIF MONTH(GETDATE()) = 12 
    SET @tablename = [devicelogs_12_] 
END 

SET @yearnam = YEAR(GETDATE()); 
SET @tabnam = @tablename + @yearnam; 

-- Execute a query 
DECLARE @query_a AS nvarchar(500); 

SET @query_a = 'INSERT INTO etimetracklite1.dbo.devicelogs SELECT * 
FROM etimetracklite1.dbo.' + [@tabnam]; 

EXECUTE sp_executesql @query_a; 

我得到的错误是SQL错误102

+1

必须注明全部设置@tablename = '[devicelogs_x_]' –

+1

ELSEIF好好尝试一下存在。使用否则如果 –

回答

0

从这种情况中删除单引号

ELSEIF MONTH(GETDATE()) = 2 
BEGIN 
SET @tablename = '[devicelogs_2_] 
END 

ELSEIFELSE IF

0

这是一个糟糕的数据模型。你应该把所有的数据放到一个表中。

如果您打印出SQL,您可能很容易发现问题。 (至少)一个问题是错误构造的方括号。例如,你有一年追随他们。

但是,在任何情况下,您可以简化代码:

TRUNCATE TABLE [etimetracklite1].[dbo].[devicelogs]; 
-- Create table 
DECLARE @tabnam AS nvarchar(18); 

SET @tabname = 'devicelogs_11_[MM][YYYY]'; 

SET @tabname = REPLACE(REPLACE(@tabname, '[MM]', MONTH(GETDATE()) 
          ), '[YYYY]', YEAR(GETDATE()) 
        ); 

DECLARE @sql nvarchar(max); 
SET @sql = 'INSERT INTO etimetracklite1.dbo.devicelogs SELECT * 
FROM etimetracklite1.dbo.' + @tabnam; 

EXECUTE sp_executesql @sql; 
+0

错误替换函数需要3个参数。显示[SQLSTATE 42000](错误174)。 –

+0

亲爱的Gordon Linoff –

+0

我收到错误 –