У меня есть функция, которая выполняет оператор select. При попытке выполнить этот оператор выбора, который возвращает одно значение и устанавливает его в переменную моей функции рушится с ошибкой:Ошибка SQL недопустимого идентификатора
Msg 203, Level 16, State 2, Procedure Info_GetWholeNumber, Line 20
The name 'SELECT MAX(LEN(CAST(FLOOR([pcom_audit_cant_con]) AS VARCHAR(38)))) AS WHOLE_NO FROM Auditorias.prod_com_audit' is not a valid identifier.
Если скопировать и вставить, что выбрать заявление он работает отлично ... поэтому это не выбрать его что-то делать с моей EXEC ... в любом случае, вот мои функции код ...
ALTER FUNCTION [dbo].[Info_GetWholeNumber]
(
@TABLE VARCHAR(MAX)
, @COLUMN VARCHAR(MAX)
)
RETURNS INT
AS
BEGIN
-- Declare the return variable here
DECLARE @WHOLE_NO INT
-- Add the T-SQL statements to compute the return value here
DECLARE @SQL VARCHAR(MAX)
SET @SQL = 'SELECT MAX(LEN(CAST(FLOOR([' + @COLUMN + ']) AS VARCHAR(38))))
AS WHOLE_NO FROM ' + @TABLE
EXEC @WHOLE_NO = @SQL
-- Return the result of the function
RETURN @WHOLE_NO
END
Если у кого есть какие-либо идеи, как я могу это исправить, я бы очень признателен за помощь! Заранее спасибо!
ОБНОВЛЕНИЕ:
ОК так что им пытаются использовать функцию sp_executesql, как указано, и я собираюсь вставить новую функцию.
ALTER FUNCTION [dbo].[Info_GetWholeNumber]
(
@TABLE VARCHAR(MAX)
, @COLUMN VARCHAR(MAX)
)
RETURNS INT
AS
BEGIN
DECLARE @WHOLE_NO INT
DECLARE @SQL NVARCHAR(MAX)
DECLARE @PARAMS NVARCHAR(MAX)
SET @SQL = N'SELECT @WHOLE_NOOUT = MAX(LEN(CAST(FLOOR(@COL) AS VARCHAR(38)))) FROM @TBL'
SET @PARAMS = N'@COL VARCHAR(MAX), @TBL VARCHAR(MAX), @WHOLE_NOOUT INT OUTPUT'
EXECUTE sp_executesql @SQL, @PARAMS, @COL = @COLUMN, @TBL = @TABLE, @WHOLE_NOOUT = @WHOLE_NO OUTPUT;
-- Return the result of the function
RETURN @WHOLE_NO
END
Сейчас я получаю эту ошибку:
Msg 1087, уровень 16, состояние 1, строка 1 должен объявить переменную таблицы "@tbl"
на мой взгляд, кажется, правильно, поскольку переменные arent объявлены иначе, чем в переменной @PARAM ... Я что-то пропустил?
Вы не можете использовать 'EXEC' на функцию – Lamak
@Lamak, как бы я идти о выполнении этого выберите заявление в моем случае, так как его динамический ...? –
Вы по-прежнему не можете использовать 'EXECUTE' или' sp_executesql' или вызывать любые другие хранимые процедуры внутри функции. Почему это должно быть функцией? –