Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неправильный синтаксис возле 'BEGIN'.  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Привет всем!
Разбираюсь с MSSQL, просьба не пинать больно
где грабли?

USE [test_mik]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[get_von_bis](@cMANDANT CHAR(2), @cMITGL_NR CHAR(6),@dDATUM DATE, @cFIELDS VARCHAR(MAX), @cWHERE VARCHAR(MAX))
RETURNS TABLE
AS
BEGIN
DECLARE @cSQL varchar(MAX)
SET @cSQL = 'SELECT @cFIELDS FROM dbo.kd_info WHERE MANDANT = @cMANDANT AND MITGL_NR = @cMITGL_NR
AND (ISNULL(VON) OR VON <= @dDATUM) AND (ISNULL(BIS) OR BIS >= @dDATUM) '
RETURN exec sp_executesql @cSQL
END
GO
30 май 11, 17:01    [10733557]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис возле 'BEGIN'.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Везде грабли. Вы объявляете инлайновую функцию, а пишите multi-statement (поэтому и ругается). RETURN exec sp_executesql @cSQL - вообще оригинальная придумка синтаксиса, которую, правда, ни в какой версии еще не реализовали. Ну и вообще из функции процедуры вызвать нельзя.

Читайте хелп, короче. Там все есть.
30 май 11, 17:04    [10733598]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис возле 'BEGIN'.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
И динамический SQL в функциях запрещён
30 май 11, 17:06    [10733611]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис возле 'BEGIN'.  [new]
Jimiz
Member

Откуда:
Сообщений: 4
USE [test_mik]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[get_von_bis](@cMANDANT CHAR(2), @cMITGL_NR CHAR(6),@dDATUM DATE, @cFIELDS VARCHAR(MAX), @cWHERE VARCHAR(MAX))
RETURNS @F TABLE -- перечисляем возвращаемые поля
AS
BEGIN
DECLARE @cSQL varchar(MAX)
SET @cSQL = 'SELECT @cFIELDS FROM dbo.kd_info WHERE MANDANT = @cMANDANT AND MITGL_NR = @cMITGL_NR
AND (ISNULL(VON) OR VON <= @dDATUM) AND (ISNULL(BIS) OR BIS >= @dDATUM) '

INSERT INTO @F(ПОЛЯ)
EXEC(@cSQL)

RETURN @F
END
GO
31 май 11, 15:44    [10739643]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис возле 'BEGIN'.  [new]
Jimiz
Member

Откуда:
Сообщений: 4
и значения параметров необходимо присвоить по средствам:
SET @cSQL = 'SELECT '+@cFIELDS'+ FROM dbo.kd_info WHERE MANDANT = '+@cMANDANT+' AND MITGL_NR = '+@cMITGL_NR +
'AND (ISNULL(VON) OR VON <= '+@dDATUM+') AND (ISNULL(BIS) OR BIS >= '+@dDATUM+') '
31 май 11, 15:47    [10739673]     Ответить | Цитировать Сообщить модератору
 Re: Неправильный синтаксис возле 'BEGIN'.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jimiz
и значения параметров необходимо присвоить по средствам:
SET @cSQL = 'SELECT '+@cFIELDS'+ FROM dbo.kd_info WHERE MANDANT = '+@cMANDANT+' AND MITGL_NR = '+@cMITGL_NR +
'AND (ISNULL(VON) OR VON <= '+@dDATUM+') AND (ISNULL(BIS) OR BIS >= '+@dDATUM+') '

Только вот динамические запросы в функциях от этого все равно доступными не станут
31 май 11, 15:48    [10739688]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить