Пытаюсь разобраться с проблемой. И причем заочно, потому что доступа к серверу с которым это приключается у меня нет. Но если что надо протестировать, есть кого попросить. Проблема в том, что даже не знаю с чего начать.
Есть batch скрипт, запускающий набор SQL скриптов через isql.
На одном сервере (MS SQL 2000) все проходит без проблем. На другом валится с сообщением "Incorrect syntax near '+' ".
Никакого '+' в SQL скрипте на котором batch валится нет.
Никому не приходилось сталкиваться с такой проблемой? Все что я нашла в Интернете - это про баг, который был пофиксен в MS SQL7 SP1 (но у нас 2000) и еще что-то про настройки. Но ни в одном, прочитанным мною сообщении сервер не жаловался на знак, которого даже нет в SQL стейтменте.
Сабина
MS SQL Server - Incorrect syntax near...
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 540
- Joined: 07 Aug 2002 16:09
- Location: Orange County, CA
-
- Уже с Приветом
- Posts: 5347
- Joined: 03 Feb 1999 10:01
- Location: NJ, USA
DECLARE @x1 NVARCHAR(100)
DECLARE @x2 NVARCHAR(100)
DECLARE @str1 NVARCHAR(100)
DECLARE @str2 NVARCHAR(100)
SET @x1 = '123456'
SET @x2 = '+'
SET @str1 = 'SELECT * FROM t WHERE xyz = ' + @x1
SET @str2 = 'SELECT * FROM t WHERE xyz = ' + @x2
EXEC @str1
EXEC @str2
На счет синтаксиса не уверен, но смысл должен быть понятен. Второй EXEC по идее должен упасть. Возможно набор скриптов принимает разные параметры на разных серверах.
DECLARE @x2 NVARCHAR(100)
DECLARE @str1 NVARCHAR(100)
DECLARE @str2 NVARCHAR(100)
SET @x1 = '123456'
SET @x2 = '+'
SET @str1 = 'SELECT * FROM t WHERE xyz = ' + @x1
SET @str2 = 'SELECT * FROM t WHERE xyz = ' + @x2
EXEC @str1
EXEC @str2
На счет синтаксиса не уверен, но смысл должен быть понятен. Второй EXEC по идее должен упасть. Возможно набор скриптов принимает разные параметры на разных серверах.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
KVA wrote:На счет синтаксиса не уверен, но смысл должен быть понятен. Второй EXEC по идее должен упасть. Возможно набор скриптов принимает разные параметры на разных серверах.
В самом SQL скрипте нет параметров. Он просто делает bunch of test data inserts.
Теория с триггерами интересна. А как триггеры можно проверить на ошибки?
Мы с эдентичными базами работаем уже давно, то есть триггеры оттестированы и делают что надо.
А тут вдруг при очередном прогоне test DB Create скриптов, вывалилась такая ерунда. Скрипты точно никто не менял, я посмотрела history по VSS.
Сабина
-
- Уже с Приветом
- Posts: 569
- Joined: 14 Dec 2003 04:06
- Location: Львов->Киев->Торонто
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Strannik223 wrote:А нету нигде динамического формирования сиквела типа sp_exec_sql или как он там называется?
Коме того выдается номер строчки где сбой произошел
Собственно вот он SQL скрипт:
Code: Select all
SET NOCOUNT ON
GO
PRINT ('Inserting data into [table1] ...')
SET IDENTITY_INSERT [table1] ON
GO
INSERT INTO [table1](att1, att2.....)
VALUES (value1, value2,...);
[one more similar insert here]
SET IDENTITY_INSERT [table1] OFF
GO
....here go similar inserts for the bunch of other tables
Actually I'vе found a piece with parameters:
SET IDENTITY_INSERT Project ON
GO
DECLARE @utcDate datetime
SET @utcDate = GETUTCDATE()
INSERT INTO PROJECT
( projectID, workOrderNum, projectName, deptName, reqDeptName,
assignedBy, assignedDt, targetDt, isPriority,
statusCode, typeCode, description, lastUpdatedBy)
VALUES (1, N'MYORDER 1', N'New router Cisco', N'MYDEPT', N'ASKING DEPT',
2, @utcDate, N'2003-09-02', 1,
N'EIP', N'DAT', N'Router Cisco ultra', 2);
GO
SET IDENTITY_INSERT Project OFF
GO
--===================================================================
-- The following section is to maintain integrity of the IDENTITY COLUMN
-- Script to Insert data should be done before this section
--====================================================================
PRINT ('FINISHED LOADING TEST DATA' )
GO
PRINT ('CONDUCTING IDENTITY MAINTENANCE ...')
GO
DBCC CHECKIDENT (WNTUser, RESEED,1)
DBCC CHECKIDENT (WNTUser, RESEED)
GO
......similar checks
PRINT ('FINISHED IDENTITY MAINTENANCE')
GO
SET NOCOUNT OFF
GO
В батче запускается командой:
isql -S %server% -d %db% -U %user% -i testdata.sql -r 1 -b -n
Сабина
-
- Уже с Приветом
- Posts: 540
- Joined: 07 Aug 2002 16:09
- Location: Orange County, CA
Варианты решения проблемы:
1. Запустить батч строкой
isql -S %server% -d %db% -U %user% -i testdata.sql -o testlog.txt
и почитать testlog.txt
или
2. Разбить батч на несколько батчей так, чтобы каждый батч делал INSERT не более чем в одну таблицу. Либо последовательно комментировать все INSERTы, оставляя незакомментированным INSERT только в одну таблицу. Посмотреть, при INSERTе в какую таблицу батч выдаст ошибку и сделать вывод, в какой таблице триггер содержит ошибку.
1. Запустить батч строкой
isql -S %server% -d %db% -U %user% -i testdata.sql -o testlog.txt
и почитать testlog.txt
или
2. Разбить батч на несколько батчей так, чтобы каждый батч делал INSERT не более чем в одну таблицу. Либо последовательно комментировать все INSERTы, оставляя незакомментированным INSERT только в одну таблицу. Посмотреть, при INSERTе в какую таблицу батч выдаст ошибку и сделать вывод, в какой таблице триггер содержит ошибку.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Rumrunner wrote:Варианты решения проблемы:
1. Запустить батч строкой
isql -S %server% -d %db% -U %user% -i testdata.sql -o testlog.txt
и почитать testlog.txt
или
2. Разбить батч на несколько батчей так, чтобы каждый батч делал INSERT не более чем в одну таблицу. Либо последовательно комментировать все INSERTы, оставляя незакомментированным INSERT только в одну таблицу. Посмотреть, при INSERTе в какую таблицу батч выдаст ошибку и сделать вывод, в какой таблице триггер содержит ошибку.
Спасибо вам большое за подсказку. N1 я им уже велела завтра утром сделать. А вот для N2 видимо придется туда завтра самой после работы тащиться.
Сабина
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Sabina wrote:Спасибо вам большое за подсказку. N1 я им уже велела завтра утром сделать. А вот для N2 видимо придется туда завтра самой после работы тащиться.
Ой ну цирк. Прогнали они сегодня утром N1 и пишут мне - спасибо-де за подсказку. Все сработало нормально.
Ну думаю если им весь батч работющий не нужен, то мне и подавно.
Сабина