Comment puis-je faire la demande HTTP à partir de SQL server?

J'ai voulu envoyer une requête HTTP à partir de SQL server pour serveur Tomcat. J'ai installé SQL server 2012 express et non .NET application dans le serveur Tomcat. J'ai vécu cela comme Faire une requête HTTP à partir de SQL server

Comme il est dit dans l'article ci-dessus, "L'objet COM WinHttp.WinHttpRequest.5.1 doit être installé sur le serveur, certains écarts types sont WinHttp.WinHttpRequest.5".
J'ai téléchargé winhttp.zip à partir de la winhttp lien de téléchargement, trouvé winhttp.dll dans le dossier zip et collé dans C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn comme il est suggéré dans ce msdn lien.

Suivant le même avis, j'ai exécuté à la suite de la ligne dans SSMS:

sp_addextendedproc 'GetHttp',
 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn\winhttp.dll';

J'ai aussi exécuté le code suivant dans SSMS comme dit dans le "Faire une requête HTTP à partir de SQL server link":

Alter function GetHttp
(
@url varchar(8000)      
)
returns varchar(8000)
as
BEGIN
DECLARE @win int 
DECLARE @hr  int 
DECLARE @text varchar(8000)

EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OADestroy @win 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

RETURN @text
END

Puis-je obtenir de l'erreur

Msg 2010, Niveau 16, État 1, Procédure GetHttp, Ligne 2

Ne peut pas effectuer de modifier sur "GetHttp" parce que c'est un incompatible type d'objet.

Je ne sais pas comment appeler la fonction pour envoyer la requête HTTP. Je suppose que c'est quelque chose comme cela GetHttp('http://www.google.co.in/').

Ce qui me manque?

Ne le faites pas. Il suffit de ne pas. Ce n'est pas ce que SQL Server est destiné.
C'est un classique "quand vous avez un marteau, tout ce que vous voyez est des clous" concept, ne le faites PAS
Comme tout le monde l'a dit, c'est une mauvaise idée. SQL Server a les notifications de requête pour permettre à l'application de savoir quand les données ont changé, mais il ne ressemble pas à JDBC supporte. Vous pouvez avoir le serveur de l'application de sondage la base de données pour les changements.
Comme @jtseng mentionné, vous pourriez peut-être avoir l'application de sondage pour les changements, peut-être l'aide d'un "recevoir à partir de la requête" comme décrit ici: msdn.microsoft.com/en-us/library/ms130764.aspx
Quelqu'un peut-il expliquer pourquoi c'est une mauvaise idée de faire de cette façon. Je me rends compte que c'est un problème de sécurité pour permettre de SQL server Active X accès. En clair, si elle ont toujours été une préoccupation première, l'option ne serait pas possible. Ce hack est justifiable que si une entreprise a utilisé qu'une ou deux fois et n'a pas encore une Powershell compétences "marteau" comme quelqu'un l'éloquence de le passer par-dessus?

OriginalL'auteur niren | 2013-07-01