DB가 MSSQL 입니다.
호출 부 SELECT dbo.FN_CALCULATE( '((2022 - 44 + 3 ) * (2 / 1 ) - 30 )')
메시지 8114, 수준 16, 상태 5, 줄 11
데이터 형식 varchar을(를) float(으)로 변환하는 중 오류가 발생했습니다.
MSSQL은 FUNCTION안에 EXEC 를 사용할 수 없나 봅니다
계산 산식을 던져서 값을 받아 보고 싶은데요
고수님들 어떻게 해결 방법이 없을까요?
SELECT CONVERT(float, '((2022 - 44 + 3 ) * (2 / 1 ) - 30 )') <--- 이런 거 거든용!
--- 아 래 -----
/****** Object: UserDefinedFunction [dbo].[FN_SPLIT_COUNT] Script Date: 2022-02-21 오전 10:53:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FN_CALCULATE](
@CALCULATE_STRING NVARCHAR(MAX)
)RETURNS FLOAT AS
/******************************************************************************
NAME: FN_CALCULATE
PURPOSE: 입력받은 문자열의 값을 계산하여 최종 값을 반환함
******************************************************************************/
BEGIN
DECLARE @Result FLOAT
SET @Result = CONVERT(float ,@CALCULATE_STRING);
RETURN @Result;
/*
DECLARE @Result FLOAT
DECLARE @REPLACE_COMMA NVARCHAR(MAX);
SET @REPLACE_COMMA = REPLACE(@CALCULATE_STRING, '''', '');
SET @Result = CONVERT(float ,@REPLACE_COMMA);
RETURN @Result;
*/
/*
DECLARE @Result FLOAT
DECLARE @res Decimal(16,2)
DECLARE @SQL NVARCHAR(2000) = '';
SET @Result = 0
SET @SQL = 'SELECT ' + @CALCULATE_STRING;
EXEC Sp_Executesql @SQL, N'@res decimal (16,2) OUTPUT',
@Result= @res output;
-- SELECT @Result = @CALCULATE_STRING;
-- exec sp_executesql @SQL;
RETURN @Result
*/
/*
DECLARE @Result FLOAT
DECLARE @sql nvarchar(max)
SELECT @sql = N'
DECLARE @x xml = ''''
SELECT CAST(@x.query('''+ @CALCULATE_STRING +''') as nvarchar(max))'
EXEC sp_executesql @sql
RETURN @Result
*/
/*
DECLARE @Result FLOAT
DECLARE @SQL NVARCHAR(2000) = '';
SET @Result = 0
SET @SQL = 'SELECT ' + @CALCULATE_STRING;
-- SELECT @Result = @CALCULATE_STRING;
exec sp_executesql @SQL;
RETURN @Result
*/
END
DECLARE @Sql NVARCHAR(100) DECLARE @Calculate_String NVARCHAR(100) DECLARE @Result FLOAT SET @Calculate_String = N'1 + 2 * 3' SET @Sql = N'SELECT @v = ' + @Calculate_String EXECUTE sp_executesql @Sql, N'@v FLOAT OUTPUT', @v = @Result OUTPUT SELECT @Result
마농님 답변 감사합니다
해당 FUNCTION을 실행 해 보니~~~ 에러가 납니다
메시지 557, 수준 16, 상태 2, 줄 16
함수 내에서는 함수와 일부 확장 저장 프로시저만 실행할 수 있습니다.
완료 시간: 2022-02-22T09:59:52.7279803+09:00
사용하신 코드 보여주세요.
/****** Object: UserDefinedFunction [dbo].[FN_CALCULATE] Script Date: 2022-02-22 오전 10:26:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FN_CALCULATE](
@CALCULATE_STRING2 NVARCHAR(MAX)
)RETURNS FLOAT AS
/******************************************************************************
NAME: FN_CALCULATE
PURPOSE: 입력받은 문자열의 값을 계산하여 최종 값을 반환함
REVISIONS:
VER DATE AUTHOR DESCRIPTION
--------- ---------- --------------- ------------------------------------
1.0 2022/02/21 WSH 1. CREATED THIS FUNCTION.
******************************************************************************/
BEGIN
DECLARE @Sql NVARCHAR(100)
DECLARE @Calculate_String NVARCHAR(100)
DECLARE @Result FLOAT
SET @Calculate_String = N'1 + 2 * 3'
SET @Sql = N'SELECT @v = ' + @Calculate_String
EXECUTE sp_executesql @Sql, N'@v FLOAT OUTPUT', @v = @Result OUTPUT
RETURN @Result;
END
음... 검색해보니 프로시져는 함수 내에서 사용이 안되는 것 같네요.
예~~~ 그런것 같더라구요!
혹시나 다른 우회 방법은 없을까요?