sql-server - 声明和赋值表函数
问题描述
我需要将我的声明部分放入一个表值函数中。
CREATE FUNCTION [Manual_COUNTRIES_2019](
@risk_1,
@risk_2,
@risk_3,
@risk_4,
@risk_5)
RETURNS (@risk_1, @risk_2,@risk_3,@risk_4,@risk_5) TABLE (Code VARCHAR(100))
AS
BEGIN
DECLARE @risk_1 TABLE (Code VARCHAR(100));
INSERT INTO @risk_1 (Code) VALUES ('AA'),('AB'),('AC');
DECLARE @risk_2 TABLE (Code VARCHAR(100));
INSERT INTO @risk_2 (Code) VALUES ('AX'),('AY'),('AZ');
DECLARE @risk_3 TABLE (Code VARCHAR(100));
INSERT INTO @risk_3 (Code) VALUES ('BB'),('BC'),('BD'),('BE');
DECLARE @risk_4 TABLE (Code VARCHAR(100));
INSERT INTO @risk_4 (Code) VALUES ('DA'),('DB'),('DC');
DECLARE @risk_5 TABLE (Code VARCHAR(100));
INSERT INTO @risk_5 (Code) VALUES ('YY'),('XZ');
RETURN
END
我以此为模板:Declare variable in table valued function
但是,它对我的表格建议和@risks 列表都不满意。我错过了什么?
解决方案
由于您不能返回多个表,我建议添加另一列来指定要添加到的表,然后可以在调用时对其进行过滤。
CREATE FUNCTION [Manual_COUNTRIES_2019]()
RETURNS @Risk TABLE (RiskNum int, Code VARCHAR(100))
AS
BEGIN
INSERT INTO @risk (RiskNum, Code)
VALUES (1, 'AA'),(1, 'AB'),(1, 'AC'),
(2, 'AX'),(2, 'AY'),(2, 'AZ'),
(3, 'BB'),(3, 'BC'),(3, 'BD'),(3, 'BE'),
(4, 'DA'),(4, 'DB'),(4, 'DC'),
(5, 'YY'),(4, 'XZ');
RETURN;
END;
但是,由于您现在不需要变量,因此我建议您使用内联表值函数,例如
CREATE FUNCTION [Manual_COUNTRIES_2019]()
RETURNS TABLE
RETURN
SELECT *
FROM (
VALUES (1, 'AA'),(1, 'AB'),(1, 'AC'),
(2, 'AX'),(2, 'AY'),(2, 'AZ'),
(3, 'BB'),(3, 'BC'),(3, 'BD'),(3, 'BE'),
(4, 'DA'),(4, 'DB'),(4, 'DC'),
(5, 'YY'),(4, 'XZ')
) AS X (RiskNum, Code);
然后,您可以按如下方式提取所需的值:
select Code from dbo.Manual_COUNTRIES_2019() where RiskNum = 1; -- For the first table, change the number to change the table.
推荐阅读
- javascript - 如何在滚动时从使用 javascript 加载元素的网页中抓取?
- c++ - C++ 中的输入限制和错误检查
- python - 如何通过python将记录插入SQLite3数据库?
- amazon-s3 - 如何在无服务器中上传多部分表单数据
- java - 如何运行 JavaFX 程序
- python - 如何拟合平面方程?
- reactjs - 如何使用 React-Router (TypeScript) 使我的登录功能与 React 功能组件一起使用?
- typescript - 定义时继续获取 ESLint “已定义但从未使用过。(no-unused-vars)”
- javascript - React Selector:通过两个组件传回 onChange 事件
- java - 带有 type() 函数的 Hibernate HQL 查询重新排列括号