Gou*_*pal 1 sql-server sql-server-2016
我试图将数据存储在一个表变量中@coordinates,该变量包含 2 行和 2 列:纬度和经度。
存储价值:
declare @coordinates table(latitude decimal(12,9), longitude decimal(12,9))
insert into @coordinates select latitude, longitude from loc.locations where place_name IN ('Delhi', 'Mumbai')
Run Code Online (Sandbox Code Playgroud)
查看值:
select * from @coordinates
Run Code Online (Sandbox Code Playgroud)
结果:
latitude longitude
28.666670000 77.216670000
19.014410000 72.847940000
Run Code Online (Sandbox Code Playgroud)
但我想一一访问这些值,例如:@coordinates[1][1] 或 @coordinates.latitude[1]
或任何可能的简单方法?
while@coordinates是一个变量,它是一个表变量,而不是一个数组。访问存储在表变量中的数据的方式与访问常规表中的数据相同,即使用查询。
现在,当您想要检索表特定行的数据时,您需要一种引用该行的方法。通常您使用某种 ID 列。在这种情况下,您可以在@coordinates声明中添加这样的列:
declare @coordinates table
(
id int identity (1,1),
latitude decimal(12,9),
longitude decimal(12,9)
);
Run Code Online (Sandbox Code Playgroud)
该id列被声明为 IDENTITY 列,并将在行添加到 时自动填充@coordinates。所以现在运行你的 INSERT 语句后,内容将如下所示:
declare @coordinates table
(
id int identity (1,1),
latitude decimal(12,9),
longitude decimal(12,9)
);
Run Code Online (Sandbox Code Playgroud)
为了检索,比如说,latitude从第 1 行,你会做
SELECT latitude FROM @coordinates WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
如有必要,您可以在适当的情况下将其用作标量表达式,例如:
SELECT
some_columns,
(SELECT latitude FROM @coordinates WHERE id = 1) + another column AS some_alias
FROM
some_table
WHERE
...
Run Code Online (Sandbox Code Playgroud)
诚然,这并不像 那样漂亮@coordinates.latitude[1],但它是在 SQL 中处理数据的传统方式。
但是请注意,如果您需要在涉及其他表的查询中检索此表的内容,并且行 ID 将取决于某些表的列,则连接 @coordinates到相应的表会更自然:
SELECT
...
c.latitude + t.some_other_column AS whatever
FROM
some_table AS t
INNER JOIN @coordinates AS c ON t.some_column = c.id
WHERE
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |