如何在sql中的execute key中写入函数

问题描述 投票:0回答:1
Create Function fnRMatrixColorGet1(
@RMID varchar(20)
)
returns varchar(100)

as
begin

EXEC (N'SELECT ' + 'C'+@RMID + ' FROM vwemployeeget where empid='+@RMID) 
return 
end
sql-server tsql dynamic-sql stored-functions
1个回答
0
投票

正如Gordon在评论中写道的那样,SQL Server中的用户定义函数无法执行动态SQL。

来自Create User-defined Functions:

  • 用户定义的函数无法使用动态SQL或临时表。表变量是允许的。

但是,您可以创建存储过程来执行此操作:

CREATE PROCEDURE stpRMatrixColorGet1
(
    @RMID varchar(20)
    @MatrixColor varchar(100) OUTPUT
)
AS

DECLARE @Sql nvarchar(4000),
        @Column sysname = N'C' + @RMID;

-- White list column name since it can't be parameterized
IF EXISTS
(
    SELECT 1
    FROM Information_Schema.Columns
    WHERE Table_Name = 'vwemployeeget'
    AND Column_Name = @Column
)
BEGIN

    SET @SQL = N'SELECT @MatrixColor = QUOTENAME('+ @Column +') FROM vwemployeeget where empid = @RMID'

    -- Safely execute dynamic SQL using sp_ExecuteSql
    EXEC sp_ExecuteSql 
                        @Sql, 
                        N'@RMID varchar(20), @MatrixColor varchar(100) OUTPUT', 
                        @RMID, 
                        @MatrixColor OUTPUT
END
© www.soinside.com 2019 - 2024. All rights reserved.