如何在sql的执行键中编写函数

Posted

技术标签:

【中文标题】如何在sql的执行键中编写函数【英文标题】:How can write function inside execute key in sql 【发布时间】:2019-03-25 12:28:46 【问题描述】:
Create Function fnRMatrixColorGet1(
@RMID varchar(20)
)
returns varchar(100)

as
begin

EXEC (N'SELECT ' + 'C'+@RMID + ' FROM vwemployeeget where empid='+@RMID) 
return 
end

【问题讨论】:

您使用的是哪个 dbms? (该代码是特定于产品的。) SQL Server 中的函数无法执行动态 SQL。 【参考方案1】:

正如 Gordon 在 cmets 中所写,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

【讨论】:

Glad to help :-)

以上是关于如何在sql的执行键中编写函数的主要内容,如果未能解决你的问题,请参考以下文章

如何确定列是不是在其表的主键中? (SQL 服务器)

如何在 SQL 函数 CHARINDEX 中使用 RegEx 查找第 n 次出现

如何像管理面板一样在 Django 的外键中添加新项目?

如何在 unordered_map 的键中使用 std::tr1::function 对象?

jOOQ:如何在选择查询中调用 Sql 用户定义函数

如何在 PostgreSQL 8.3 中执行窗口函数