2013-10-30 3 views
0

쿼리를 실행할 때마다 구문 오류가 발생합니다. 문제는 코드가 해당 섹션을 실행하여 오류가 발생하는 행을 실행할 때 오류 메시지가 표시되는 이유를 알 수 없기 때문입니다.SQL 구문 오류, 잘못된 구문?

내 코드
Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near ')'. 
Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near ')'. 

:

declare @Source_Database_Name AS varchar(255) = 'dbo.Production2'; 
declare @Destination_Database_Name AS varchar(255) = 'c365online_script1'; 

declare @Company_Id int = 1 --declare a companyid 

CREATE TABLE #CompanyID1 (ID bigint) 

INSERT INTO #CompanyID1(ID) 
VALUES('1') 

--FIRST CURSOR LOOP THROUGH THIS TABLE 
CREATE TABLE #TableList (


    processorder int, 
    tablename NVARCHAR(100) 
    ) 
INSERT INTO #TableList (processorder, tablename) 
VALUES 
(1, 'tCompany'); 

DECLARE @firstLoop BIT 
--SET @firstLoop = true 
DECLARE @Counter INT -- counting variable 

----------- Cursor specific code starts here ------------ 
-- company cursor 
declare copyCompanyDataCursor CURSOR fast_forward FOR 
SELECT ID from #CompanyID1; 

open copyCompanyDataCursor 
fetch next from copyCompanyDataCursor into @Company_Id; 

WHILE @@FETCH_STATUS = 0 
    BEGIN 

     declare @processorder int; 
     declare @tablename varchar(500); 
     -- table cursor 

     declare copyTableDataCursor CURSOR fast_forward FOR 
     SELECT processorder,tablename from #TableList order by processorder; 

     open copyTableDataCursor 
     fetch next from copyTableDataCursor into @processorder, @tablename; 

     WHILE @@FETCH_STATUS = 0 
     BEGIN 
      SET IDENTITY_INSERT [c365online_script1].[dbo].[tCompany] ON 

      -- Does the table have a companyID column? if statement checking for company id 
      IF EXISTS(SELECT * FROM Production2.INFORMATION_SCHEMA.COLUMNS 
       WHERE COLUMN_NAME='CompanyID' and TABLE_NAME='tProperty') 
        BEGIN 
        declare @debug varchar(max) 
          EXEC('INSERT' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id + ')')   
        END 
          ELSE 
        BEGIN 
          Print 'No' 
        END 
      -- if yes then copy data based on companyID in cursor 



      -- if no check if this is the first time through company loop and copy all data 
      -- if @firstloop company exists look at information schema 

        -- insert into c365online_script1.dbo.tCompany(selec 
        EXEC('INSERT ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ')') 

        -- company logic 


     SET IDENTITY_INSERT [c365online_script1].[dbo].[tCompany] OFF 

      FETCH NEXT FROM copyTableDataCursor into @processorder,@tablename; 
     END 

     close copyTableDataCursor; 

     Deallocate copyTableDataCursor; 

--INSERT INTO c365online_script1.dbo.tCompany 
--SELECT * 
--FROM production2.tCompany 
--WHERE ISNULL(CompanyID, 0) = 0 -- copy all data where id is equal to zero 
[email protected]_Database_Name 

--  
     --EXEC(INSERT + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id + ')')  
     --SET @firstLoop = false; 
     FETCH NEXT FROM copyCompanyDataCursor into @Company_Id; 
    END 

CLOSE copyCompanyDataCursor; 
DEALLOCATE copyCompanyDataCursor; 
+0

'')''->'@Company_Id + ')''와'@tablename +')''가 하나 이상있는 것으로 보입니다. –

답변

1

이 라인의 각 끝 부분에 여분의 괄호처럼 보이는 : 따옴표로 닫는 브래킷,하지만 오프닝 브래킷이 있습니다

EXEC('INSERT' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id + ')') 

EXEC('INSERT ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ')') 

그것에 대응한다.

+0

구문이 어떻게되어야할까요? 코드 시작 부분에 대괄호를 추가했지만 오류가 계속 발생했습니다. – user2520671

+1

시도 : EXEC ('INSERT INTO'+ @Destination_Database_Name + '.dbo.'+ @tablename + 'SELECT * '+ @Source_Database_Name +'.DBO FROM. '+ @tablename +'WHERE '+ @Source_Database_Name +'.DBO. '+ @tablename +'.CompanyID = '+ @Company_Id)' 및 'EXEC ('+ @Dablename +'SELECT @ FROM '+ @Source_Database_Name +'.dbo. '+ @ tablename)' – Free2Rhyme2k

+0

이제이 오류 메시지 7202, 레벨 11, 상태 2 , 줄 1 sys.servers에서 'dbo'서버를 찾을 수 없습니다. 올바른 서버 이름이 지정되었는지 확인하십시오. 필요한 경우 sp_addlinkedserver 저장 프로 시저를 실행하여 sys.servers에 서버를 추가합니다. – user2520671