【发布时间】:2020-07-10 20:06:11
【问题描述】:
我有这个函数,但我想传递一个表,以便使用相同的函数来完成多个表的工作。例如,我希望这个函数适用于 table1 和 table2。但它目前仅适用于 table1。我试图徒劳地使用动态sql;它没有传递选择的参数。 有人可以帮忙吗?指导我如何将表格作为参数传递。
示例数据,表 1
CREATE TABLE table1 (id int identity (1,1), name varchar(60))
INSERT INTO table1
VALUES ('a1, a2, a9, a8')
示例数据,table2
CREATE TABLE table2 (id int identity (1,1), name varchar(60))
INSERT INTO table2
VALUES ('a1, a2, a9, a8')
功能:
CREATE FUNCTION f_split
(@id INT)
RETURNS @ab
TABLE (name VARCHAR(20),
ab1 VARCHAR(5)
)
AS
BEGIN
DECLARE @temp TABLE (rn INT, name VARCHAR(5))
INSERT INTO @temp(rn, name)
SELECT ROW_NUMBER() OVER(ORDER BY LTRIM(RTRIM(Split.a.value('.', 'NVARCHAR(MAX)'))) ASC) rn, LTRIM(RTRIM(Split.a.value('.', 'NVARCHAR(MAX)'))) Result
FROM
(
SELECT CAST('<X>'+REPLACE([name], ',', '</X><X>')+'</X>' AS XML) AS String
FROM table1 where id = @id
) AS A
CROSS APPLY String.nodes('/X') AS Split(a)
ORDER BY 1
INSERT INTO @ab
SELECT * FROM @temp
RETURN
END
这给出了 table1 的结果。
SELECT * FROM F_SPLIT(1)
但我希望同样的功能也适用于 table2。
感谢任何帮助。
【问题讨论】:
-
你试过在网上搜索sql server dynamic sql这个词吗?
-
我做了并尝试应用它。但我认为它不适用于函数。
标签: sql sql-server function tsql stored-functions