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

我还不熟悉空间数据类型和SQL server,我有以下表格:

  • 表(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