Sql server sql server存储过程空间数据
我还不熟悉空间数据类型和SQL server,我有以下表格:Sql server sql server存储过程空间数据,sql-server,Sql Server,我还不熟悉空间数据类型和SQL server,我有以下表格: 表(A)ZipCodesUSA 列:zipcodes |纬度|经度|城市|州 表(B)美国城市经纬度 列:ID int |城市nvarchar(40)|坐标地理| 我试图做的是创建一个存储过程,将所有数据从表A传输到B,并按状态更改为地理位置。它确实会更改,但每个状态只有一行。为什么?我没有指定选择1或任何内容。提前谢谢你 ALTER PROC dbo.USA_Cities @StateAbbr NVARCHAR(2) A
- 表(A)
ZipCodesUSA
- 列:
zipcodes |纬度|经度|城市|州
- 列:
- 表(B)
美国城市经纬度
- 列:
ID int |城市nvarchar(40)|坐标地理|
- 列:
A
传输到B
,并按状态更改为地理位置。它确实会更改,但每个状态只有一行。为什么?我没有指定选择1
或任何内容。提前谢谢你
ALTER PROC dbo.USA_Cities
@StateAbbr NVARCHAR(2)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @City NVARCHAR(30)
DECLARE @Longitude NVARCHAR(50)
DECLARE @Latitude NVARCHAR(50)
SELECT @City = City, @Longitude= Longitude,@Latitude= Latitude
FROM ZipCode
WHERE StateAbbr = @StateAbbr
INSERT INTO dbo.US_Cities(City, Coordinates)
VALUES(@City, geography::Point(ISNULL(@Longitude, ''),ISNULL(@Latitude, ''), 4326))
END;
EXEC dbo.USA_Cities 'NY'
以下代码:
SELECT @City = City, @Longitude= Longitude,@Latitude= Latitude
FROM ZipCode
WHERE StateAbbr = @StateAbbr;
每个状态只获取一行,而不是一个状态的所有行。您需要将其放入循环中,或者将select
和insert
替换为:
INSERT INTO dbo.US_Cities(City, Coordinates)
SELECT @City = City,
geography::Point(ISNULL(Longitude, ''), ISNULL(Latitude, ''), 4326)
FROM ZipCode
WHERE StateAbbr = @StateAbbr;
创建程序[dbo]。[USA\U CitiesModified] @StateAbbr NVARCHAR(2) 作为 开始 结束
非常好,谢谢 不建议使用循环(RBAR)。错误消息:为变量赋值的SELECT语句不能与数据检索操作结合使用。INSERT语句不能包含为变量赋值的SELECT语句。感谢Gordon Linoff的重播,您是对的。它只提供了1行,但我还是犯了这个错误,再次结巴了:(那是什么‘地理:’方法?我在哪里可以找到其他方法的文档?它们是方便的方法吗?
SET NOCOUNT ON;
INSERT INTO dbo.US_Cities(City, Coordinates)
SELECT City, geography::Point(ISNULL(Longitude, ''),ISNULL(Latitude, ''), 4326)
FROM dbo.ZipCode
WHERE StateAbbr = @StateAbbr