Create Function fnRMatrixColorGet1(
@RMID varchar(20)
)
returns varchar(100)
as
begin
EXEC (N'SELECT ' + 'C'+@RMID + ' FROM vwemployeeget where empid='+@RMID)
return
end
正如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