MS-Office-Forum

MS-Office-Forum (https://www.ms-office-forum.net/forum/index.php)
-   SQL (https://www.ms-office-forum.net/forum/forumdisplay.php?f=41)
-   -   Teil aus CONNECTIONPROPERTY('client_net_address') (https://www.ms-office-forum.net/forum/showthread.php?t=351799)

Ralph71 15.05.2018 15:28

Teil aus CONNECTIONPROPERTY('client_net_address')
 
Hallo zusammen,

bin wie jeder einmal in diesem Bereich eher Anfänger.
SQL_Express2012
Ich habe einen View gebaut, der in der WHERE-Bedingung so aussieht:

WHERE (IP =
(SELECT CONNECTIONPROPERTY('client_net_address') AS IPAdresse))

Funktioniert alles bestens. Er holt sich die IP des Client und liefert das entsprechende Ergebnis.

Sinn macht es in meiner Konstellation aber nur, wenn er künftig nicht die vollständige IP ermittelt, sondern nur den "Adressraum".
Beispiel:
Ergebnis aus SELECT CONNECTIONPROPERTY('client_net_address') AS IPAdresse)
aktuell: 192.168.5.23
künftig: 192.168.5

oder
aktuell: 192.168.152.13
künftig: 192.168.152

Wie kann ich das realisieren?
Vielen Dank!

hcscherzer 15.05.2018 16:19

Mit mehrfachem Aufruf der Funktion CHARINDEX() kannst Du die Position des dritten Punktes ermitteln.
Und mit der Funktion LEFT() die Zeichen bis dahin herausholen.

Nebenbei ist der Alias in der WHERE Klausel nicht notwendig.

Ralph71 16.05.2018 07:42

Hallo Hans-Christian,

danke für Deine Antwort. Dass ich den String (IP) zerlegen muss war mir schon klar. Allerdings ist das ja nicht im View möglich, sondern muss wie Du schon geschrieben hast über eine Funktion geschehen. Und da is bei mir eben Ende.
Wie übergebe ich aus dem View die IP an die Funktion?
Wie bekomme ich das Ergebnis wieder in den View zurück?
Es fehlt also etwas an den Basics...

Ralph71 16.05.2018 10:26

Edit: Wie kann man eine selber programmierte Funktion in der Datenbank ablegen um sie dann mittels SELECT immer verwenden zu können.
Bei mir will er die Datei ständig lokal am PC ablegen....

hcscherzer 16.05.2018 10:47

Es ist im SELECT möglich aber nur mit verschachtelten Funktionsaufrufen. Das wird aber leicht unleserlich deshalb ist Dein Ansatz, dies in einer Funktion zu realisieren, korrekt.

Um die Funktion anzulegen, solltest Du am besten mit einem Management Studio arbeiten, in dem Du das SQL Script schreiben und auch gleich ausprobieren kannst.

Der Befehl ist CREATE FUNCTION ...

Ralph71 16.05.2018 11:08

Ich verwende das MS SQL Managementstudio. Anders macht das ja keinen Sinn (Alternative ist noch VS)

Wie lege ich die Funktion an?
Ich drücke [Neue Abfrage] und schreibe entsprechenden Code rein.
Wenn ich die Abrage speichern will, dann will er das als lokales File am PC ablegen und nicht in der Datenbank ZB unter "Funktionen"....


Oder geht das nicht, weil es eine EXPRESS-Version ist?

Ralph71 16.05.2018 12:09

Youtube ist mein Freund.
Basics hab ich jetzt verstanden....
https://www.youtube.com/watch?v=xwkgBdQC8QQ

Ralph71 16.05.2018 14:03

habs....

Wenns jemand benötigt:

.....

ALTER FUNCTION [dbo].[fgetIP]
(

--@IP varchar(15)
)
RETURNS varchar(15)
AS
BEGIN

DECLARE @IP2 varchar(15);
Declare @pos1 int;
Declare @pos2 int;
Declare @pos3 int;

SELECT @IP2 = convert(varchar, (SELECT CONNECTIONPROPERTY('client_net_address')))
SET @pos1 = CHARINDEX('.',@IP2);
SET @pos2 = CHARINDEX('.',@IP2,@pos1+1);
SET @pos3 = CHARINDEX('.',@IP2,@pos2+1);
SET @IP2 = LEFT(@IP2,@pos3-1);

RETURN @IP2

END

Aufruf über View:
... FROM dbo.T_IP
WHERE (IP = dbo.fgetIP())


Danke für den Denkanstoß.... :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.