如何在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 函数 CHARINDEX 中使用 RegEx 查找第 n 次出现