将 table 变量传递给存储过程
Passing a table variable to a stored procedure
我正在寻求创建一个可以传递一列的程序 table,该程序将输出中位数。现在我有一个程序可以确定中位数;但是,我收到错误消息,指出我的 @table table 变量尚未声明,并且找不到存储过程。
我的程序中位数:
CREATE OR ALTER PROCEDURE dbo.median
(@table NUMERIC,
@median FLOAT OUTPUT)
AS
DECLARE @size AS NUMERIC
SET @size = (SELECT COUNT(*) FROM @table)
SET @median = (SELECT AVG(1) FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY 1) AS ROW FROM @table) AS subquery
WHERE subquery.ROW = ROUND(@size / 2, 0) OR subquery.ROW = ROUND(@size / 2, 0, 1))
RETURN
GO
调用过程:
DECLARE @Arsenic TABLE(Ar FLOAT)
INSERT INTO @Arsenic SELECT Arsenic from dbo.HubspotWaterTestAverages
EXEC dbo.median (SELECT Arsenic FROM dbo.HubspotWaterTestAverages)
注:Arsenic 表示水质测试结果的砷含量,取值范围从 null 到 10
工作程序预计只是 return 列的中值,稍后我计划将其交叉连接到主 table。感谢您的帮助!
这可能会有所帮助。除了 table 变量必须使用 Table 类型。
CREATE TABLE Employee
(
EmpId int NOT NULL,
EmployeeName nvarchar(MAX),
)
GO
CREATE TYPE EmployeeType AS TABLE
(
EmpId int NOT NULL,
EmployeeName nvarchar(MAX)
)
GO
CREATE PROCEDURE PassTableTypeIntoProcedure(@EmployeeType EmployeeType READONLY)
AS
BEGIN
INSERT INTO Employee
SELECT * FROM @EmployeeType
END
GO
DECLARE @EmployeeTypeVariable AS EmployeeType
INSERT INTO @EmployeeTypeVariable VALUES
(1,'A'),
( 2,'B')
EXEC PassTableTypeIntoProcedure @EmployeeTypeVariable
GO
SELECT * FROM Employee
我正在寻求创建一个可以传递一列的程序 table,该程序将输出中位数。现在我有一个程序可以确定中位数;但是,我收到错误消息,指出我的 @table table 变量尚未声明,并且找不到存储过程。
我的程序中位数:
CREATE OR ALTER PROCEDURE dbo.median
(@table NUMERIC,
@median FLOAT OUTPUT)
AS
DECLARE @size AS NUMERIC
SET @size = (SELECT COUNT(*) FROM @table)
SET @median = (SELECT AVG(1) FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY 1) AS ROW FROM @table) AS subquery
WHERE subquery.ROW = ROUND(@size / 2, 0) OR subquery.ROW = ROUND(@size / 2, 0, 1))
RETURN
GO
调用过程:
DECLARE @Arsenic TABLE(Ar FLOAT)
INSERT INTO @Arsenic SELECT Arsenic from dbo.HubspotWaterTestAverages
EXEC dbo.median (SELECT Arsenic FROM dbo.HubspotWaterTestAverages)
注:Arsenic 表示水质测试结果的砷含量,取值范围从 null 到 10
工作程序预计只是 return 列的中值,稍后我计划将其交叉连接到主 table。感谢您的帮助!
这可能会有所帮助。除了 table 变量必须使用 Table 类型。
CREATE TABLE Employee
(
EmpId int NOT NULL,
EmployeeName nvarchar(MAX),
)
GO
CREATE TYPE EmployeeType AS TABLE
(
EmpId int NOT NULL,
EmployeeName nvarchar(MAX)
)
GO
CREATE PROCEDURE PassTableTypeIntoProcedure(@EmployeeType EmployeeType READONLY)
AS
BEGIN
INSERT INTO Employee
SELECT * FROM @EmployeeType
END
GO
DECLARE @EmployeeTypeVariable AS EmployeeType
INSERT INTO @EmployeeTypeVariable VALUES
(1,'A'),
( 2,'B')
EXEC PassTableTypeIntoProcedure @EmployeeTypeVariable
GO
SELECT * FROM Employee