如何使用现有表类型BTC_USDT_OpenOrders声明变量并插入查询数据
SQL表变量声明实现方案
首先需要明确你使用的数据库类型,以及BTC_USDT_OpenOrders的实际属性,对应实现方案如下:
场景1:已提前创建BTC_USDT_OpenOrders为用户自定义表类型
你给出的原始写法本身就是正确的,仅需要把WHERE条件中的(Expression)替换为实际的过滤逻辑即可,示例如下:
DECLARE @list BTC_USDT_OpenOrders INSERT INTO @list SELECT * FROM BTC_USDT_OpenOrders WHERE Amount > 10 -- 替换为你的实际过滤条件
场景2:BTC_USDT_OpenOrders是普通业务表,未自定义对应表类型
这种情况下不能直接把表名当做类型声明变量,不同数据库的实现方案如下:
SQL Server 实现
方案A:使用临时表(更便捷,结构和原表完全一致)
-- 先创建和原表结构一致的空临时表 SELECT * INTO #BTC_OpenOrders_List FROM BTC_USDT_OpenOrders WHERE 1=2 -- 插入符合条件的数据 INSERT INTO #BTC_OpenOrders_List SELECT * FROM BTC_USDT_OpenOrders WHERE (你的过滤条件)
方案B:使用表变量
需要手动指定和原表完全一致的字段结构:
DECLARE @BTC_OpenOrders_List TABLE ( OrderId BIGINT PRIMARY KEY, TradePrice DECIMAL(18,8), TradeAmount DECIMAL(18,8), OrderStatus TINYINT, CreateTime DATETIME -- 补充所有和BTC_USDT_OpenOrders表一致的字段定义 ) INSERT INTO @BTC_OpenOrders_List SELECT * FROM BTC_USDT_OpenOrders WHERE (你的过滤条件)
MySQL 实现
MySQL没有原生表变量支持,直接使用临时表即可:
-- 创建和原表结构一致的空临时表 CREATE TEMPORARY TABLE BTC_OpenOrders_List LIKE BTC_USDT_OpenOrders; -- 插入符合条件的数据 INSERT INTO BTC_OpenOrders_List SELECT * FROM BTC_USDT_OpenOrders WHERE (你的过滤条件);
PostgreSQL 实现
-- 创建临时表 CREATE TEMP TABLE BTC_OpenOrders_List AS SELECT * FROM BTC_USDT_OpenOrders WHERE (你的过滤条件) WITH NO DATA; -- 插入数据 INSERT INTO BTC_OpenOrders_List SELECT * FROM BTC_USDT_OpenOrders WHERE (你的过滤条件);
注意事项
- 表变量作用域仅限当前批处理,临时表作用域为当前会话,可根据实际使用场景选择
- 建议避免使用
SELECT *写法,明确列出需要查询的字段,避免后续表结构变动导致代码报错
内容的提问来源于stack exchange,提问作者AlexPIgalyov
相关产品推荐
相关产品推荐

