用于IN比较重复使用的SQL'数组'

时间:2013-05-16 09:49:04

标签: sql database arrays

完全可以像这样执行SELECT语句:

SELECT *
FROM orders
WHERE order_id in (10000, 10001, 10003, 10005);

但是,是否可以创建一个存储'array'(10000,...)的变量,以便在多个语句中重复使用?

SELECT *
FROM orders
WHERE order_id in @IDarray;

道歉,如果这是一个非常简单的问题 - 我们都要问他们一次!

编辑:嗯,也许我应该澄清一下。在我的确切情况下,我有一堆ID(让我们使用上面的数组作为例子),它们是硬编码但可能会改变。

这些应该可以重用于多个INSERT语句,以便我们可以为每个ID将内容插入到多个表中。两个这样的最终结果可能是:

INSERT INTO table1 VALUES (10000, 1, 2, 3);
INSERT INTO table1 VALUES (10001, 1, 2, 3);
INSERT INTO table1 VALUES (10003, 1, 2, 3);
INSERT INTO table1 VALUES (10005, 1, 2, 3);

INSERT INTO table2 VALUES (10000, a, b, c);
INSERT INTO table2 VALUES (10001, a, b, c);
INSERT INTO table2 VALUES (10003, a, b, c);
INSERT INTO table2 VALUES (10005, a, b, c);

显然,这里能够指定数组节省空间,并且允许在一个位置更改它而不是必须修改INSERT。

2 个答案:

答案 0 :(得分:1)

使用Microsoft SQL Server,您可以使用表变量:

CREATE TABLE @IDTable(id INT PRIMARY KEY);
-- insert IDs into table

SELECT *
FROM orders o
INNER JOIN @IDTable i ON i.id = o.order_id;

INSERT INTO table2
SELECT id, 1, 2, 3
  FROM @IDTable

INSERT INTO table2
SELECT id, 'a', 'b', 'c'
  FROM @IDTable

答案 1 :(得分:0)

使用Declare表变量,您可以实现您想要的目标。

例如:

Declare  @tbl table(orderID int,Orders varchar(max));

insert into @tbl
SELECT * FROM orders WHERE order_id in (10000, 10001, 10003, 10005);

Select orderID ,Orders from @tbl