Sql server 获取参数作为SQL函数中的列名
我编写了一个函数,它将传递一个字符串参数。在该函数中,它应该获得字符串,正如您所看到的,但它不起作用,因为我传递的参数是字符串。参数的接收者假设获得列名,如果我将列名作为其格式写入,那么它工作正常,但我需要获得通过 这是我传递的字符串:Sql server 获取参数作为SQL函数中的列名,sql-server,Sql Server,我编写了一个函数,它将传递一个字符串参数。在该函数中,它应该获得字符串,正如您所看到的,但它不起作用,因为我传递的参数是字符串。参数的接收者假设获得列名,如果我将列名作为其格式写入,那么它工作正常,但我需要获得通过 这是我传递的字符串: [Where], [University], [BeginDate], [GraduateDate], [Major] 这就是函数 DROP FUNCTION NewTable GO CREATE FUNCTION NewTable (@PassPa
[Where], [University], [BeginDate], [GraduateDate], [Major]
这就是函数
DROP FUNCTION NewTable
GO
CREATE FUNCTION NewTable
(@PassParameter NVARCHAR(MAX))
RETURNS TABLE
AS
RETURN
SELECT *
FROM
(SELECT O.RowIndex, O.OptionValue, T.TypeValue
FROM Options O
LEFT OUTER JOIN Types T ON T.TypeID = O.TypeID
GROUP BY O.RowIndex, O.OptionValue, T.TypeValue) d
PIVOT
(
MAX(OptionValue)
FOR [TypeValue] IN (@PassParameter) <-- this is tricky part this will not work but I put this [Where], [University], [BeginDate], [GraduateDate], [Major] this is gonna work
) PIV
GO
另外,我不能使用存储过程,因为使用函数是我的要求。在用户定义的函数中不能有动态sql。如果希望具有此类功能,可以定义CLR用户定义函数 相反,您可以使用动态sql定义存储过程,并将存储过程的输出插入tabletype 我已提供样品供你们参考 首先定义一个用户定义的表类型
CREATE TYPE RowIndex as
Table
(
RowIndex INT,
optionValue VARCHAR(20),
TypeValue VARCHAR(20)
);
接下来,使用动态sql内容定义存储过程
CREATE PROCEDURE NewTable
(@PassParameter NVARCHAR(MAX))
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql =
'
SELECT *
FROM
(SELECT O.RowIndex, O.OptionValue, T.TypeValue
FROM Options O
LEFT OUTER JOIN Types T ON T.TypeID = O.TypeID
GROUP BY O.RowIndex, O.OptionValue, T.TypeValue) d
PIVOT
(
MAX(OptionValue)
FOR [TypeValue] IN '+ @PassParameter +'
) PIV
'
EXEC sp_Executesql @sql
END
GO
现在,将存储过程的输出插入表类型
DECLARE @RowIndex RowIndex
INSERT INTO @RowIndex
EXEC NewTable 'Test'
SELECT * FROM @RowIndex
用户定义的函数中不能有动态sql。如果希望具有此类功能,可以定义CLR用户定义函数 相反,您可以使用动态sql定义存储过程,并将存储过程的输出插入tabletype 我已提供样品供你们参考 首先定义一个用户定义的表类型
CREATE TYPE RowIndex as
Table
(
RowIndex INT,
optionValue VARCHAR(20),
TypeValue VARCHAR(20)
);
接下来,使用动态sql内容定义存储过程
CREATE PROCEDURE NewTable
(@PassParameter NVARCHAR(MAX))
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql =
'
SELECT *
FROM
(SELECT O.RowIndex, O.OptionValue, T.TypeValue
FROM Options O
LEFT OUTER JOIN Types T ON T.TypeID = O.TypeID
GROUP BY O.RowIndex, O.OptionValue, T.TypeValue) d
PIVOT
(
MAX(OptionValue)
FOR [TypeValue] IN '+ @PassParameter +'
) PIV
'
EXEC sp_Executesql @sql
END
GO
现在,将存储过程的输出插入表类型
DECLARE @RowIndex RowIndex
INSERT INTO @RowIndex
EXEC NewTable 'Test'
SELECT * FROM @RowIndex
完成查询的方法需要动态SQL。但是,不能从函数中执行动态SQL。因此,看起来您必须修改您的需求。完成查询的方法需要动态SQL。但是,不能从函数中执行动态SQL。因此,看起来您必须修改您的需求。