検索
ホームページデータベースmysql チュートリアルsqlserver调用qqmap服务,根据地点获取所在城市

sqlserver 调用qq map 服务,根据地点获取所在城市 首先需要解决的是如何在SQL SERVER中调用web service,其次是针对web service的返回json进行解析; 1、调用web service create proc getCityByPosition( @url varchar(2048) --Your Web Service Url (invoke

sqlserver 调用qq map 服务,根据地点获取所在城市

首先需要解决的是如何在SQL SERVER中调用web service,其次是针对web service的返回值json进行解析;

1、调用web service

create proc getCityByPosition(
    @url varchar(2048) --Your Web Service Url (invoked)
)
as
declare @Object as Int;
declare @ResponseText as Varchar(8000);
declare @resultStr varchar(2048)

-- exec getCityByPosition 'http://apis.map.qq.com/ws/geocoder/v1/?location=34.287100,117.255000&key=K76BZ-W3O2Q-RFL5S-GXOPR-3ARIT-6KFE5&output=json&&callback=?'

Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get',@url,'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
 
Select top 1 StringValue
    from parseJSON(@ResponseText) where name = 'city';

Exec sp_OADestroy @Object

执行测试可能报错,提示更改全局配置,需管理员执行下面代码:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

2、解析json字符串,使用自定义函数parseJSON

USE [pm_v3]
GO
/****** Object:  UserDefinedFunction [dbo].[parseJSON]    Script Date: 01/02/2015 18:06:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
       
      
    ALTER FUNCTION [dbo].[parseJSON]( @JSON NVARCHAR(MAX))  
    RETURNS @hierarchy TABLE  
      (  
       element_id INT IDENTITY(1, 1) NOT NULL, /* internal surrogate primary key gives the order of parsing and the list order */  
       parent_ID INT,/* if the element has a parent then it is in this column. The document is the ultimate parent, so you can get the structure from recursing from the document */  
       Object_ID INT,/* each list or object has an object id. This ties all elements to a parent. Lists are treated as objects here */  
       NAME VARCHAR(2000),/* the name of the object */  
       StringValue VARCHAR(MAX) NOT NULL,/*the string representation of the value of the element. */  
       ValueType VARCHAR(10) NOT null /* the declared type of the value represented as a string in StringValue*/  
      )  
    AS  
    BEGIN  
      DECLARE  
        @FirstObject INT, --the index of the first open bracket found in the JSON string  
        @OpenDelimiter INT,--the index of the next open bracket found in the JSON string  
        @NextOpenDelimiter INT,--the index of subsequent open bracket found in the JSON string  
 【本文来自鸿网互联 (http://www.68idc.cn)】       @NextCloseDelimiter INT,--the index of subsequent close bracket found in the JSON string  
        @Type NVARCHAR(10),--whether it denotes an object or an array  
        @NextCloseDelimiterChar CHAR(1),--either a '}' or a ']'  
        @Contents NVARCHAR(MAX), --the unparsed contents of the bracketed expression  
        @Start INT, --index of the start of the token that you are parsing  
        @end INT,--index of the end of the token that you are parsing  
        @param INT,--the parameter at the end of the next Object/Array token  
        @EndOfName INT,--the index of the start of the parameter at end of Object/Array token  
        @token NVARCHAR(200),--either a string or object  
        @value NVARCHAR(MAX), -- the value as a string  
        @name NVARCHAR(200), --the name as a string  
        @parent_ID INT,--the next parent ID to allocate  
        @lenJSON INT,--the current length of the JSON String  
        @characters NCHAR(36),--used to convert hex to decimal  
        @result BIGINT,--the value of the hex symbol being parsed  
        @index SMALLINT,--used for parsing the hex value  
        @Escape INT --the index of the next escape character  
          
       
      
      DECLARE @Strings TABLE /* in this temporary table we keep all strings, even the names of the elements, since they are 'escaped' in a different way, and may contain, unescaped, brackets denoting objects or lists. These are replaced in the JSON string by tokens representing the string */  
        (  
         String_ID INT IDENTITY(1, 1),  
         StringValue NVARCHAR(MAX)  
        )  
      SELECT--initialise the characters to convert hex to ascii  
        @characters='0123456789abcdefghijklmnopqrstuvwxyz',  
      /* firstly we process all strings. This is done because [{} and ] aren't escaped in strings, which complicates an iterative parse. */  
        @parent_ID=0;  
      WHILE 1=1 --forever until there is nothing more to do  
        BEGIN  
          SELECT  
            @start=PATINDEX('%[^a-zA-Z]["]%', @json);--next delimited string  
          IF @start=0 BREAK --no more so drop through the WHILE loop  
          IF SUBSTRING(@json, @start+1, 1)='"'   
            BEGIN --Delimited Name  
              SET @start=@Start+1;  
              SET @end=PATINDEX('%[^\]["]%', RIGHT(@json, LEN(@json+'|')-@start));  
            END  
          IF @end=0 --no end delimiter to last string  
            BREAK --no more  
          SELECT @token=SUBSTRING(@json, @start+1, @end-1)  
          --now put in the escaped control characters  
          SELECT @token=REPLACE(@token, FROMString, TOString)  
          FROM  
            (SELECT  
              '\"' AS FromString, '"' AS ToString  
             UNION ALL SELECT '\\', '\'  
             UNION ALL SELECT '\/', '/'  
             UNION ALL SELECT '\b', CHAR(08)  
             UNION ALL SELECT '\f', CHAR(12)  
             UNION ALL SELECT '\n', CHAR(10)  
             UNION ALL SELECT '\r', CHAR(13)  
             UNION ALL SELECT '\t', CHAR(09)  
            ) substitutions  
          SELECT @result=0, @escape=1  
      --Begin to take out any hex escape codes  
          WHILE @escape>0  
            BEGIN  
              SELECT @index=0,  
              --find the next hex escape sequence  
              @escape=PATINDEX('%\x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]%', @token)  
              IF @escape>0 --if there is one  
                BEGIN  
                  WHILE @index<4 --there are always four digits to a \x sequence     
                    BEGIN   
                      SELECT --determine its value  
                        @result=@result+POWER(16, @index)  
                        *(CHARINDEX(SUBSTRING(@token, @escape+2+3-@index, 1),  
                                    @characters)-1), @index=@index+1 ;  
               
                    END  
                    -- and replace the hex sequence by its unicode value  
                  SELECT @token=STUFF(@token, @escape, 6, NCHAR(@result))  
                END  
            END  
          --now store the string away   
          INSERT INTO @Strings (StringValue) SELECT @token  
          -- and replace the string with a token  
          SELECT @JSON=STUFF(@json, @start, @end+1,  
                        &#39;@string&#39;+CONVERT(NVARCHAR(5), @@identity))  
        END  
      -- all strings are now removed. Now we find the first leaf.    
      WHILE 1=1  --forever until there is nothing more to do  
      BEGIN  
       
      
      SELECT @parent_ID=@parent_ID+1  
      --find the first object or list by looking for the open bracket  
      SELECT @FirstObject=PATINDEX(&#39;%[{[[]%&#39;, @json)--object or array  
      IF @FirstObject = 0 BREAK  
      IF (SUBSTRING(@json, @FirstObject, 1)=&#39;{&#39;)   
        SELECT @NextCloseDelimiterChar=&#39;}&#39;, @type=&#39;object&#39;  
      ELSE   
        SELECT @NextCloseDelimiterChar=&#39;]&#39;, @type=&#39;array&#39;  
      SELECT @OpenDelimiter=@firstObject  
       
      
      WHILE 1=1 --find the innermost object or list...  
        BEGIN  
          SELECT  
            @lenJSON=LEN(@JSON+&#39;|&#39;)-1  
      --find the matching close-delimiter proceeding after the open-delimiter  
          SELECT  
            @NextCloseDelimiter=CHARINDEX(@NextCloseDelimiterChar, @json,  
                                          @OpenDelimiter+1)  
      --is there an intervening open-delimiter of either type?  
          SELECT @NextOpenDelimiter=PATINDEX(&#39;%[{[[]%&#39;,  
                 RIGHT(@json, @lenJSON-@OpenDelimiter))--object  
          IF @NextOpenDelimiter=0 --then we are done.  
            BREAK  
          SELECT @NextOpenDelimiter=@NextOpenDelimiter+@OpenDelimiter  
          IF @NextCloseDelimiter<@NextOpenDelimiter --we have found the next leaf  
            BREAK   
          --we prepare to walk the document further  
          IF SUBSTRING(@json, @NextOpenDelimiter, 1)=&#39;{&#39;   
            SELECT @NextCloseDelimiterChar=&#39;}&#39;, @type=&#39;object&#39;  
          ELSE   
            SELECT @NextCloseDelimiterChar=&#39;]&#39;, @type=&#39;array&#39;  
          SELECT @OpenDelimiter=@NextOpenDelimiter  
        END  
      /*and now we can parse out the list or name/value pairs. We first pull out the structure into the variable &#39;@contents&#39; and replace it in the JSON document with a token representing it.*/  
      SELECT  
        @contents=SUBSTRING(@json, @OpenDelimiter+1,  
                            @NextCloseDelimiter-@OpenDelimiter-1)  
      SELECT  
        @JSON=STUFF(@json, @OpenDelimiter,  
                    @NextCloseDelimiter-@OpenDelimiter+1,  
                    &#39;@&#39;+@type+CONVERT(NVARCHAR(5), @parent_ID))  
     /*and do each name/value pair, or just value, in the case of an ordered value list.  */              
      WHILE (PATINDEX(&#39;%[A-Za-z0-9@+.e]%&#39;, @contents))<>0   
        BEGIN  
          IF @Type=&#39;Object&#39; /*it will be a 0-n list containing a string followed by a string, number,boolean, or null*/  
            BEGIN  
              SELECT  
                @end=CHARINDEX(&#39;:&#39;, &#39; &#39;+@contents) /*if there is anything, it will be a string-based name.*/  
              SELECT  @start=PATINDEX(&#39;%[^A-Za-z@][@]%&#39;, &#39; &#39;+@contents)--find out what the token is  
              SELECT @token=SUBSTRING(&#39; &#39;+@contents, @start+1, @End-@Start-1),  
                @endofname=PATINDEX(&#39;%[0-9]%&#39;, @token),--and find out the number so as to fish out the string  
                @param=RIGHT(@token, LEN(@token)-@endofname+1)  
              SELECT--separate the token from the contents of the structure (chop, chop0  
                @token=LEFT(@token, @endofname-1),  
                @Contents=RIGHT(&#39; &#39;+@contents, LEN(&#39; &#39;+@contents+&#39;|&#39;)-@end-1)  
              --now we get the string we have stored (names are stored as strings)  
              SELECT  @name=stringvalue FROM @strings  
                WHERE string_id=@param --fetch the name  
            END  
          ELSE --it is merely a value in an ordered list, without a name  
            SELECT @Name=null    
          SELECT  
            @end=CHARINDEX(&#39;,&#39;, @contents)-- a string-token, object-token, list-token, number,boolean, or null  
          IF @end=0 --then we&#39;re at the end of the list  
            SELECT @end=PATINDEX(&#39;%[A-Za-z0-9@+.e][^A-Za-z0-9@+.e]%&#39;, @Contents+&#39; &#39;)  
              +1  
          SELECT @start=PATINDEX(&#39;%[^A-Za-z0-9@+.e][A-Za-z0-9@+.e]%&#39;, &#39; &#39;+@contents)  
          SELECT --get the value and snip the contents  
            @Value=RTRIM(SUBSTRING(@contents, @start, @End-@Start)),  
            @Contents=RIGHT(@contents+&#39; &#39;, LEN(@contents+&#39;|&#39;)-@end)  
          IF SUBSTRING(@value, 1, 7)=&#39;@object&#39;   
            INSERT INTO @hierarchy  
              (NAME, parent_ID, StringValue, Object_ID, ValueType)  
              SELECT @name, @parent_ID, SUBSTRING(@value, 8, 5),  
                SUBSTRING(@value, 8, 5), &#39;object&#39;   
          ELSE   
            IF SUBSTRING(@value, 1, 6)=&#39;@array&#39;   
              INSERT INTO @hierarchy  
                (NAME, parent_ID, StringValue, Object_ID, ValueType)  
                SELECT @name, @parent_ID, SUBSTRING(@value, 7, 5),  
                  SUBSTRING(@value, 7, 5), &#39;array&#39;   
            ELSE   
              IF SUBSTRING(@value, 1, 7)=&#39;@string&#39; --it is a string  
                INSERT INTO @hierarchy  
                  (NAME, parent_ID, StringValue, ValueType)  
                  SELECT @name, @parent_ID, stringvalue, &#39;string&#39;  
                  FROM @strings  
                  WHERE string_id=SUBSTRING(@value, 8, 5)  
              ELSE   
                IF @value IN (&#39;true&#39;, &#39;false&#39;)--a boolean!   
                  INSERT INTO @hierarchy  
                    (NAME, parent_ID, StringValue, ValueType)  
                    SELECT @name, @parent_ID, @value, &#39;boolean&#39;  
                ELSE   
                  IF @value=&#39;null&#39; --it is a null  
                    INSERT INTO @hierarchy  
                      (NAME, parent_ID, StringValue, ValueType)  
                      SELECT @name, @parent_ID, @value, &#39;null&#39;  
                  ELSE   
                    IF PATINDEX(&#39;%[^0-9]%&#39;, @value)>0 --a real number  
                      INSERT INTO @hierarchy  
                        (NAME, parent_ID, StringValue, ValueType)  
                        SELECT @name, @parent_ID, @value, &#39;real&#39;  
                    ELSE --it must be an INT  
                      INSERT INTO @hierarchy  
                        (NAME, parent_ID, StringValue, ValueType)  
                        SELECT @name, @parent_ID, @value, &#39;int&#39;  
       
      
        END  
      END  
    --and so lastly we put the root into the hierarchy.  
    INSERT INTO @hierarchy (NAME, parent_ID, StringValue, Object_ID, ValueType)  
      SELECT &#39;-&#39;, NULL, &#39;&#39;, @parent_id-1, @type  
    --  
       RETURN  
    END  


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
InnoDBバッファープールとそのパフォーマンスの重要性を説明してください。InnoDBバッファープールとそのパフォーマンスの重要性を説明してください。Apr 19, 2025 am 12:24 AM

Innodbbufferpoolは、データをキャッシュしてページをインデックス作成することにより、ディスクI/Oを削減し、データベースのパフォーマンスを改善します。その作業原則には次のものが含まれます。1。データ読み取り:Bufferpoolのデータを読む。 2。データの書き込み:データを変更した後、bufferpoolに書き込み、定期的にディスクに更新します。 3.キャッシュ管理:LRUアルゴリズムを使用して、キャッシュページを管理します。 4.読みメカニズム:隣接するデータページを事前にロードします。 BufferPoolのサイジングと複数のインスタンスを使用することにより、データベースのパフォーマンスを最適化できます。

MySQL対その他のプログラミング言語:比較MySQL対その他のプログラミング言語:比較Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

MySQLの学習:新しいユーザー向けの段階的なガイドMySQLの学習:新しいユーザー向けの段階的なガイドApr 19, 2025 am 12:19 AM

MySQLは、データストレージ、管理、分析に適した強力なオープンソースデータベース管理システムであるため、学習する価値があります。 1)MySQLは、SQLを使用してデータを操作するリレーショナルデータベースであり、構造化されたデータ管理に適しています。 2)SQL言語はMySQLと対話するための鍵であり、CRUD操作をサポートします。 3)MySQLの作業原則には、クライアント/サーバーアーキテクチャ、ストレージエンジン、クエリオプティマイザーが含まれます。 4)基本的な使用には、データベースとテーブルの作成が含まれ、高度な使用にはJoinを使用してテーブルの参加が含まれます。 5)一般的なエラーには、構文エラーと許可の問題が含まれ、デバッグスキルには、構文のチェックと説明コマンドの使用が含まれます。 6)パフォーマンスの最適化には、インデックスの使用、SQLステートメントの最適化、およびデータベースの定期的なメンテナンスが含まれます。

MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境