Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
Pvase
Member

Откуда:
Сообщений: 1010
Вот такой запрос:
EXEC '
SELECT
	13 AS [IdBase],
	Контрагенты.IdSBJ95 AS [IdSystem],
	Контрагенты.[Name] AS [Name],
	Контрагенты.[NameSht] AS [NameSht],
	Контрагенты.[Dsc] AS [Dsc],
	Сети.IdSBJ2679 AS [IdNci_0087],
	ФинДанные.[CodeEGRPOU] AS [CodeEGRPOU],
	ФинДанные.[NumTax] AS [INN],
	NULL AS [IdNci_0086],
	NULL AS [CodeEGRPOU_N],
	NULL AS [INN_N]
FROM [DBASET].Pack.dbo.SBJ95 AS Контрагенты
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ96 AS Категории ON (Категории.IdSBJ96 = Контрагенты.IdSBJ96)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ104 AS ФинДанные ON (ФинДанные.IdSBJ104 = Контрагенты.IdSBJ104Dft)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ226 AS ЮрСтатус ON (ЮрСтатус.IdSBJ226 = ФинДанные.IdSBJ226)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ109 AS ПравТип  ON (ПравТип.IdSBJ109 = ФинДанные.IdSBJ109) 
LEFT OUTER JOIN [DBASET].Pack.dbo.GEO340 AS Страны ON (Страны.IdGEO340 = ФинДанные.IdGEO340)
LEFT OUTER JOIN [DBASET].Pack.dbo.GEO342 AS Города ON (Города.IdGEO342 = Контрагенты.IdGEO342)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2707 AS ТипТочки ON (ТипТочки.IdBKS2707 = Контрагенты.IdBKS2707)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2708 AS КатегАБС ON (КатегАБС.IdBKS2708 = Контрагенты.IdBKS2708)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ2679 AS Сети ON (Сети.IdSBJ2679 = Контрагенты.IdSBJ2679)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2706 AS Направления ON (Направления.IdBKS2706 = Сети.IdBKS2706)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2705 AS КатПокупателей ON (КатПокупателей.IdBKS2705 = Сети.IdBKS2705)
LEFT OUTER JOIN [DBASET].Pack.dbo.GEO342 AS Города2 ON (Города2.IdGEO342 = Сети.IdGEO342)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS1974 AS СпособОплаты ON (СпособОплаты.IdBKS1974 = Контрагенты.IdBKS1974) 
WHERE
	Контрагенты.[Name] IS NOT NULL'

выдает следующую ошибку:
автор
Сообщение 102, уровень 15, состояние 1, строка 1
Неправильный синтаксис около конструкции "
SELECT
13 AS [IdBase],
Контрагенты.IdSBJ95 AS [IdSystem],
Контрагенты.[Name] AS [Name],
Контрагенты.[NameSht] AS [NameS".

при этом если выполнить запрос без EXEC - то прекрасно работает. Подскажите в чем проблема? Спасибо.
22 май 14, 19:09    [16057538]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
Glory
Member

Откуда:
Сообщений: 104751
Pvase
Подскажите в чем проблема?

В "Неправильный синтаксис около конструкции "
22 май 14, 19:11    [16057549]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
EXEC ('
SELECT
	13 AS [IdBase],
	Контрагенты.IdSBJ95 AS [IdSystem],
	Контрагенты.[Name] AS [Name],
	Контрагенты.[NameSht] AS [NameSht],
	Контрагенты.[Dsc] AS [Dsc],
	Сети.IdSBJ2679 AS [IdNci_0087],
	ФинДанные.[CodeEGRPOU] AS [CodeEGRPOU],
	ФинДанные.[NumTax] AS [INN],
	NULL AS [IdNci_0086],
	NULL AS [CodeEGRPOU_N],
	NULL AS [INN_N]
FROM [DBASET].Pack.dbo.SBJ95 AS Контрагенты
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ96 AS Категории ON (Категории.IdSBJ96 = Контрагенты.IdSBJ96)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ104 AS ФинДанные ON (ФинДанные.IdSBJ104 = Контрагенты.IdSBJ104Dft)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ226 AS ЮрСтатус ON (ЮрСтатус.IdSBJ226 = ФинДанные.IdSBJ226)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ109 AS ПравТип  ON (ПравТип.IdSBJ109 = ФинДанные.IdSBJ109) 
LEFT OUTER JOIN [DBASET].Pack.dbo.GEO340 AS Страны ON (Страны.IdGEO340 = ФинДанные.IdGEO340)
LEFT OUTER JOIN [DBASET].Pack.dbo.GEO342 AS Города ON (Города.IdGEO342 = Контрагенты.IdGEO342)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2707 AS ТипТочки ON (ТипТочки.IdBKS2707 = Контрагенты.IdBKS2707)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2708 AS КатегАБС ON (КатегАБС.IdBKS2708 = Контрагенты.IdBKS2708)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ2679 AS Сети ON (Сети.IdSBJ2679 = Контрагенты.IdSBJ2679)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2706 AS Направления ON (Направления.IdBKS2706 = Сети.IdBKS2706)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS2705 AS КатПокупателей ON (КатПокупателей.IdBKS2705 = Сети.IdBKS2705)
LEFT OUTER JOIN [DBASET].Pack.dbo.GEO342 AS Города2 ON (Города2.IdGEO342 = Сети.IdGEO342)
LEFT OUTER JOIN [DBASET].Pack.dbo.BKS1974 AS СпособОплаты ON (СпособОплаты.IdBKS1974 = Контрагенты.IdBKS1974) 
WHERE
	Контрагенты.[Name] IS NOT NULL')


Без скобок - это выполнение процедуры.

Сообщение было отредактировано: 22 май 14, 19:12
22 май 14, 19:12    [16057555]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
Pvase
Member

Откуда:
Сообщений: 1010
Не нашел там непрвильного синтаксиса. Если использовать переменную @TextZP VarChar(2000), то сообщение другое:
автор
Сообщение 203, уровень 16, состояние 2, строка 31
Имя "
SELECT
13 AS [IdBase],
Контрагенты.IdSBJ95 AS [IdSystem],
Контрагенты.[Name] AS [Name],
Контрагенты.[NameSht] AS [NameSht],
Контрагенты.[Dsc] AS [Dsc],
Сети.IdSBJ2679 AS [IdNci_0087],
ФинДанные.[CodeEGRPOU] AS [CodeEGRPOU],
ФинДанные.[NumTax] AS [INN],
NULL AS [IdNci_0086],
NULL AS [CodeEGRPOU_N],
NULL AS [INN_N]
FROM [DBASET].Pack.dbo.SBJ95 AS Контрагенты
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ96 AS Категории ON (Категории.IdSBJ96 = Контрагенты.IdSBJ96)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ104 AS ФинДанные ON (ФинДанные.IdSBJ104 = Контрагенты.IdSBJ104Dft)
LEFT OUTER JOIN [DBASET].Pack.dbo.SBJ226 AS ЮрСтатус ON" не является допустимым идентификатором.

Подозреваю что ошибка где то в другом, а не тексте запроса.
22 май 14, 19:15    [16057570]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Очень тяжело не найти неправильного синтаксиса:
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/bc806b71-cc55-470a-913e-c5f761d5c4b7.htm
Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

Execute a character string
{ EXEC | EXECUTE } 
        ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
    [ AS { LOGIN | USER } = ' name ' ]
[;]



Сообщение было отредактировано: 22 май 14, 19:17
22 май 14, 19:17    [16057576]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
Pvase
Member

Откуда:
Сообщений: 1010
Гавриленко Сергей Алексеевич,

Спасибо. Забыл уже, пишу процедуру и вызываю ее без скобок, а внутри процедуры забыл о скобках.
22 май 14, 19:32    [16057656]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 почему т не работет EXEC @TextZP, а сам текст работает  [new]
babona
Member [заблокирован]

Откуда: Батуринск
Сообщений: 1816
Pvase,

попутно: если у вас все так запросы пишут, то не приведи господь, т. к.:
1) если база переедет на другой сервер, то лазить по всем процедурам и запросам править имя сервера;
2) зачем собирать в одну широкую выборку поля из разных таблиц, еще бы десяток таблиц приджойнить, а чо! ;
3) то псевдонимы на русском, то на английском;
4) страны джойнятся к фин.данным, а города - к контрагентам - забавный дизайн однако
5) надо ожидать план исполнения запроса не самый оптимальный будет

ах да ..... запрос пишет моноэсник
23 май 14, 00:33    [16058835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить