Выполняю код
RS = СоздатьОбъект("ODBCRecordset");
RS.Отладка(1);
RS.УстБД1С();
ТекстЗапроса = "
|IF OBJECT_ID (N'dbo.Уровень_Ном', N'FN') IS NOT NULL
| DROP FUNCTION dbo.Уровень_Ном;
//RS.ВыполнитьИнструкцию(ТекстЗапроса);
//ТекстЗапроса = "
|GO
|CREATE FUNCTION dbo.Уровень_Ном (@IDSpr Char(9))
| RETURNS Int
| BEGIN
| DECLARE @R Char(9)
| DECLARE @Lev Int
| SET @Lev = 0
| SET @R = @IDSpr
| WHILE (@R <> $ПустойИД) AND (@R IS NOT NULL)
| BEGIN
| SELECT
| @R = PARENTID, @Lev = @Lev + 1
| FROM $Справочник."+ЭлементВид+" (nolock)
| WHERE
| (ID = @R)
| END
| RETURN @Lev
|END;
|GO
//RS.ВыполнитьИнструкцию(ТекстЗапроса);
//ТекстЗапроса = "
|SELECT dbo.Уровень_Ном(Номенклатура.ID) [Уровень]
| ,Номенклатура.ID [Элемент $Справочник."+ЭлементВид+"]
| ,Номенклатура.ParentID [Родитель $Справочник."+ЭлементВид+"]
| FROM $Справочник."+ЭлементВид+" AS Номенклатура (nolock)
|WHERE
| Номенклатура.ID = :Товар";
RS.УстановитьТекстовыйПараметр("Товар", Элемент);
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
получаю ошибку
IF OBJECT_ID (N'dbo.Уровень_Ном', N'FN') IS NOT NULL
DROP FUNCTION dbo.Уровень_Ном;
GO
CREATE FUNCTION dbo.Уровень_Ном (@IDSpr Char(9))
RETURNS Int
BEGIN
DECLARE @R Char(9)
DECLARE @Lev Int
SET @Lev = 0
SET @R = @IDSpr
WHILE (@R <> ' 0 ') AND (@R IS NOT NULL)
BEGIN
SELECT
@R = PARENTID, @Lev = @Lev + 1
FROM sc656 (nolock)
WHERE
(ID = @R)
END
RETURN @Lev
END;
GO
SELECT dbo.Уровень_Ном(Номенклатура.ID) [Уровень]
,Номенклатура.ID [Элемент $Справочник.Номенклатура]
,Номенклатура.ParentID [Родитель $Справочник.Номенклатура]
FROM sc656 AS Номенклатура (nolock)
WHERE
Номенклатура.ID = ' EL1G '
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
{\\*****************************.ERT(254)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "GO".
в QA код
IF OBJECT_ID (N'dbo.Уровень_Ном', N'FN') IS NOT NULL
DROP FUNCTION dbo.Уровень_Ном;
GO
CREATE FUNCTION dbo.Уровень_Ном (@IDSpr Char(9))
RETURNS Int
BEGIN
DECLARE @R Char(9)
DECLARE @Lev Int
SET @Lev = 0
SET @R = @IDSpr
WHILE (@R <> ' 0 ') AND (@R IS NOT NULL)
BEGIN
SELECT
@R = PARENTID, @Lev = @Lev + 1
FROM sc656 (nolock)
WHERE
(ID = @R)
END
RETURN @Lev
END;
GO
SELECT dbo.Уровень_Ном(Номенклатура.ID) [Уровень]
,Номенклатура.ID [Элемент $Справочник.Номенклатура]
,Номенклатура.ParentID [Родитель $Справочник.Номенклатура]
FROM sc656 AS Номенклатура (nolock)
WHERE
Номенклатура.ID = ' EL1G '
выполняется без ошибок.
С раскомментированными строками ошибки нет, но выполняется слишком долго. Стандартный метод Уровень() быстрее.
Догадываюсь, что "GO" это отдельная фишка, которую нужно прикручивать. Подскажите как. Сапсибо!