我有一个执行select语句的函数。当我尝试执行它返回一个值并将其设置为可变我的函数,出现以下错误崩溃此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.
如果我复制和粘贴Select语句它工作得很好。所以这是不选择它是与我的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
如果任何人有任何想法如何,我可以解决这个我会很感激的帮助!提前致谢!
更新:
确定这样的IM尝试使用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
我现在收到此错误:
消息1087,级别16,状态1, 行必须声明表变量 “@TBL”
这在我看来似乎正确,因为变量没有在@PARAM变量中声明...我在这里丢失了什么?
不能使用'EXEC'上的功能 – Lamak 2012-03-09 19:08:23
@Lamak如何将我去执行,既然在我的情况选择语句中的动态...? – 2012-03-09 19:14:13
您仍然不能使用'EXECUTE'或'sp_executesql'或调用函数内的任何其他存储过程。为什么这需要成为一个功能? – 2012-03-09 20:21:18