2013-11-01 8 views
1

Я проделал некоторую отладку на моем sql, и я не могу понять, сбойная ошибка, которую я получаю. Я сузил ее до нескольких строк, которые я не вижу, в чем проблема, пожалуйста, помогите мне.Неверный синтаксис рядом с ']'.?

Я получаю эту ошибку

I Am Msg здесь 2 102, уровень 15, состояние 1, строка 1 Неправильный синтаксис около ']'. Я here3

Print 'I am here2' 
         SET IDENTITY_INSERT c365online_script1.dbo.tCompany ON 
         declare @cols2 varchar(max) 
         select @cols2 = (Select Stuff((Select '],[' + C.COLUMN_NAME From INFORMATION_SCHEMA.COLUMNS As C Where C.TABLE_SCHEMA = T.TABLE_SCHEMA And C.TABLE_NAME = T.TABLE_NAME Order By C.ORDINAL_POSITION For Xml Path('')), 1, 2, '') As Columns From INFORMATION_SCHEMA.TABLES As T WHERE T.TABLE_NAME = @tablename) 
         EXEC('INSERT INTO [' + @Destination_Database_Name + '].[dbo].[' + @tablename + '] (' + @cols2 + ']' + ') SELECT ' + @cols2 + ']' + ' FROM [' + @Source_Database_Name + '].[dbo].[' + @tablename + ']'); 
         Print 'I am here3' 
+2

Вместо того, чтобы просто слепо 'EXEC'ing любой SQL вы производите, вы можете изменить его на' PRINT' вместо и * см *, что SQL вы пытаетесь запустить. Это будет намного быстрее, чем сделать настройку, запустить код, получить сообщение об ошибке, отправить в SO, а затем надеяться, что кто-то сможет диагностировать проблему, не увидев SQL. Даже если вы не можете решить это самостоятельно, будучи в состоянии * показать * нам, какой SQL, который вы создаете, должен сделать обратную связь намного быстрее. –

ответ

7

Вы пропустили вступительную квадратные скобки здесь:

... ') SELECT ' + @cols2 + ']' + ' FROM ... 

Кроме того, я бы порекомендовал вам переключиться на использование the QuoteName() function вместо:

... ') SELECT ' + QuoteName(@cols2) + ' FROM... 
+1

+1 для QuoteName() узнал что-то новое! – Ric

+0

Как бы выглядел мой код с открытой квадратной скобкой Im unsure, куда бы он мог пойти – user2520671

+0

Я рекомендую не использовать их и вместо этого переключиться на функцию QuoteName(). Я уже указал вам в правильном направлении, но я не отвечу на тарелку для вас. Вы не научитесь, не пытаясь! – gvee

0

Вы пропускаете о 3 открывающих кронштейна, насколько я могу рассказать по телефону

select @cols2 = (Select Stuff((Select '],[ 

и

(' + @cols2 + ']' // -> either [' + @cols2 + ']' or (' + @cols2 + ')' 

и

+ ') SELECT ' + @cols2 + ']' -- -> either ') SELECT [' + @cols2 + ']' or ') SELECT (' + @cols2 + ')' 
0
declare @cols2 nvarchar(max) 
select @cols2 = (Select Stuff((Select ',[' + C.COLUMN_NAME + ']' 
       From INFORMATION_SCHEMA.COLUMNS As C 
       Where C.TABLE_SCHEMA = T.TABLE_SCHEMA 
       And C.TABLE_NAME = T.TABLE_NAME 
       Order By C.ORDINAL_POSITION For Xml Path('')), 1, 1, '') As Columns 
       From INFORMATION_SCHEMA.TABLES As T 
       WHERE T.TABLE_NAME = @tablename) 

Редактировать

DECLARE @Destination_Database_Name NVARCHAR(128) = 'Trg_DataBaseName' 
DECLARE @tablename NVARCHAR(128) = 'AgressoIFCGLItems' 
DECLARE @Source_Database_Name NVARCHAR(128) = 'Configsandpit' 

Print 'I am here2' 

--SET IDENTITY_INSERT c365online_script1.dbo.tCompany ON 
declare @cols2 varchar(max) 
select @cols2 = (Select Stuff((Select ',' + QUOTENAME(C.COLUMN_NAME) [text()] 
       From INFORMATION_SCHEMA.COLUMNS As C 
       Where C.TABLE_SCHEMA = T.TABLE_SCHEMA 
       And C.TABLE_NAME = T.TABLE_NAME 
       Order By C.ORDINAL_POSITION For Xml Path('')), 1, 1, '') As Columns 
       From INFORMATION_SCHEMA.TABLES As T 
       WHERE T.TABLE_NAME = @tablename) 
DECLARE @sql NVARCHAR(MAX) 
SET @sql = 'INSERT INTO ' + QUOTENAME(@Destination_Database_Name) + '.[dbo].' + QUOTENAME(@tablename) + ' (' + @cols2 + ') SELECT ' + @cols2 + ' FROM ' + QUOTENAME(@Source_Database_Name) + '.[dbo].' + QUOTENAME(@tablename) + ''; 

EXECUTE sp_Executesql @sql 

Ваша потребность изменить вас @sql заявление после того, как у вас есть используя функцию QOUTENAME, поскольку она добавляет вам квадратные спины, вам не нужно конкатцировать квадратные квадратики в вашем заявлении Sql.

Результат

INSERT INTO [Trg_DataBaseName].[dbo].[TableName] ([Col1],[Col2],[Col3],[Col4],[Col5]) SELECT [Col1],[Col2],[Col3],[Col4],[Col5] FROM [Src_Database].[dbo].[TableName] 
+0

жаль, что я получаю еще больше ошибок, используя это – user2520671

+0

Что такое сообщение об ошибке ??? –

+0

Msg 2812, уровень 16, состояние 62, строка 56 Не удалось найти хранимую процедуру ''. Msg 102, Level 15, State 1, Line 1 Неверный синтаксис рядом с ']'. Msg 1038, Level 15, State 4, Line 1 Отсутствует или пустое имя объекта или столбца. Для операторов SELECT INTO убедитесь, что каждый столбец имеет имя. Для других утверждений найдите пустые псевдонимы. Псевдонимы, определенные как «" или [], не допускаются. Измените псевдоним на допустимое имя. Msg 2812, уровень 16, состояние 62, строка 59 Не удалось найти хранимую процедуру 'c365online_script1'. – user2520671

Смежные вопросы