0

クエリを実行するたびに、構文エラーが発生します。問題は、エラーが発生していると思われる行を実行すると、コードがそのセクションを実行するため、以下のエラー メッセージが表示される理由がわかりません。

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
--@Destination_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;
4

1 に答える 1

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 + ')')

引用符で囲まれた閉じ括弧がありますが、それに対応する開き括弧はありません。

于 2013-10-30T10:31:25.460 に答える