SQL 具有 2 个值的 Ouery 参数
SQL Ouery Parameter with 2 values
有谁知道为什么当我试图给出一个包含两个值的参数时我没有从这个查询中得到任何值?比如第一个参数?当我尝试仅使用一个值时它有效吗?
SELECT * FROM amountStatistikFN('1111,2222','2020','10001','1' )
SQL-函数:
ALTER FUNCTION appAmountStatistikFN
(
@client nvarchar(25),
@year nvarchar(25),
@persnr nvarchar(25),--
@location nvarchar(25)
)
RETURNS TABLE
AS
RETURN
(
SELECT persnr, client, location, activity, year, SUM(amount) AS Summe
FROM app_hours
WHERE
persnr IN (@persnr) AND year=2020 AND location IN (@location) AND client IN (@client)
GROUP BY persnr, client, location, activity, year
)
GO
假设您要将列与输入的 CSV 字符串进行比较,您可以使用 LIKE
比较:
ALTER FUNCTION appAmountStatistikFN (
@client nvarchar(25),
@year nvarchar(25),
@persnr nvarchar(25),
@location nvarchar(25)
)
RETURNS TABLE
AS
RETURN (
SELECT persnr, client, location, activity, year, SUM(amount) AS Summe
FROM app_hours
WHERE ',' + @persnr + ',' LIKE '%,' + persnr + ',%' AND
year = 2020 AND
',' + @location + ',' LIKE '%,' + location + ',%' AND
',' + @client + ',' LIKE '%,' + client + ',%'
GROUP BY persnr, client, location, activity, year
)
GO
以上答案假定位置和客户端输入也可能是 CSV 字符串。如果不是,那么您可以保留这些标准的代码,就像您最初拥有的那样,并将列与输入参数进行直接比较。
有谁知道为什么当我试图给出一个包含两个值的参数时我没有从这个查询中得到任何值?比如第一个参数?当我尝试仅使用一个值时它有效吗?
SELECT * FROM amountStatistikFN('1111,2222','2020','10001','1' )
SQL-函数:
ALTER FUNCTION appAmountStatistikFN
(
@client nvarchar(25),
@year nvarchar(25),
@persnr nvarchar(25),--
@location nvarchar(25)
)
RETURNS TABLE
AS
RETURN
(
SELECT persnr, client, location, activity, year, SUM(amount) AS Summe
FROM app_hours
WHERE
persnr IN (@persnr) AND year=2020 AND location IN (@location) AND client IN (@client)
GROUP BY persnr, client, location, activity, year
)
GO
假设您要将列与输入的 CSV 字符串进行比较,您可以使用 LIKE
比较:
ALTER FUNCTION appAmountStatistikFN (
@client nvarchar(25),
@year nvarchar(25),
@persnr nvarchar(25),
@location nvarchar(25)
)
RETURNS TABLE
AS
RETURN (
SELECT persnr, client, location, activity, year, SUM(amount) AS Summe
FROM app_hours
WHERE ',' + @persnr + ',' LIKE '%,' + persnr + ',%' AND
year = 2020 AND
',' + @location + ',' LIKE '%,' + location + ',%' AND
',' + @client + ',' LIKE '%,' + client + ',%'
GROUP BY persnr, client, location, activity, year
)
GO
以上答案假定位置和客户端输入也可能是 CSV 字符串。如果不是,那么您可以保留这些标准的代码,就像您最初拥有的那样,并将列与输入参数进行直接比较。