解析可能不在一列中的地址数据

时间:2016-07-26 18:26:37

标签: sql sql-server stored-procedures sql-server-2012

我目前正在开发一个项目,其中客户端需要有一个字段,在这种情况下,城市状态和邮政编码字段在视图中分为3个单独的字段。我确实找到了做得很好的代码,但是我遇到的问题是,城市状态和zip数据并不总是在同一列中。有时它位于shp_to_addr_2列中,有时它位于shp_to_addr_3列中。

代码最终会抛出一个参数错误,因为它有时会以传递给它的空值结束。我已经尝试使用变量来捕获包含数据的列,但最终还是会遇到这个令人讨厌的错误。这是我作为存储过程设置的代码,带有错误消息。我做错了什么?

[
  {
    "id": 243,
    "user_id": 76,
    "account_id": 1,
    "unique_id": "12345",
    "special_user_id": null,
  },
  {
    "id": 244,
    "user_id": 84,
    "account_id": 1,
    "unique_id": "123456",
    "special_user_id": "staff_123456",
  }
]

程序编译,但执行时我得到了这个:

  

Msg 537,Level 16,State 2,Procedure USER_SP_VI_USER_UPS_TRACK_2,第13行   传递给LEFT或SUBSTRING函数的长度参数无效。

1 个答案:

答案 0 :(得分:0)

您只是将恰好来自表VI_USER_UPS_TRACK_2的最后一行提取到变量@address中,并根据您进入不同的路径。我假设你的表中有很多行,所以你的逻辑根本不起作用。

您需要编写一个case语句来检查您正在处理的各个行,并根据该行获取数据。

此外,@address是过程的输入参数,但是您在过程的开头覆盖了该值。