Announcement

Collapse
No announcement yet.

SQL-Server 2000: Standardwert in Tabellenspalte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL-Server 2000: Standardwert in Tabellenspalte

    Hallo zusammen. Kann man zwei Statements als Standartwert in einer Tballenspalte mit einander Verbinden ( Trennzeichen "-" ), z.B suser_sname() - Host_name()

    Hier mal ein Beispiel-Script für eine Tabelle:

    CREATE TABLE [dbo].[Test] (
    [Wert] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL ,
    [Workstation] [nvarchar] (128) COLLATE Latin1_General_CI_AS NULL ,
    [UserName] [nvarchar] (128) COLLATE Latin1_General_CI_AS NULL
    ) ON [PRIMARY]
    GO

    ALTER TABLE [dbo].[Test] ADD
    CONSTRAINT [DF_Test_Workstation] DEFAULT (host_name()) FOR [Workstation],
    CONSTRAINT [DF_Test_UserName] DEFAULT (suser_sname()) FOR [UserName]
    GO

    Ich möchte nun die CONSTRAINT-Funktionen in einer Spalte hinterienander, z.B. (host_name()) - (host_name())

  • #2
    Hallo,
    selbstverständlich - dafür gibt es sogar verschiedene Alternativen. Die einfachste (bei der die abgekürzte Schreibweise für den DEFAULT-Constraint verwendet wird) sieht so aus:

    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: blue;">USE </span>tempdb</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>ComputeDemo</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; id&nbsp;&nbsp; <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">NOT NULL IDENTITY PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; wert NVARCHAR(99) <span style="color: blue;">NOT NULL DEFAULT host_name</span>() + <span style="color: maroon;">'-' </span>+ suser_sname()</p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>dbo.ComputeDemo <span style="color: blue;">DEFAULT VALUES</span>;</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>* <span style="color: blue;">FROM </span>dbo.ComputeDemo;</p></div&gt

    Comment


    • #3
      Danke....
      Das hat funktioniert.....
      Ich hätte da noch ne frage:
      Gibt es eine Funktion für den Windowsanmeldename

      Comment


      • #4
        Hallo,
        der SQL Server unterstützt zum einen die reine Windows Authentifizierung, bei der ein Active Directory-Benutzerkonto mit einem Datenbankbenutzer verbunden wird. Aber zum anderen ist optional auch ein eigenständiges SQL Server-Login für die Benutzer zulässig, die kein entsprechendes Konto im Active Directory besitzen. Wenn man (unabhängig vom SQL Server-Konto) generell das Benutzerkonto der interaktiven Windows-Anmeldesitzung benötigt, muss man auf andere Wege ausweichen. Beim SQL Server 2005 ist dies (dank der CLR-Integration) kein Problem, da eine in C# oder Visual Basic geschriebene Funktion direkt eingebunden werden kann

        Comment


        • #5
          Danke. Für dies Antwort....
          Dann brauch ich wohl nicht weiter suchen, da ich SQL-Server 2000 verwende..

          Oder

          Comment


          • #6
            Hallo,
            beim SQL Server 2000 stehen 2 Möglichkeiten zur Verfügung:
            1. Erweiterte Systemprozeduren (XP) als Win32-DLL implementiert
            2. Automation-Objekt (COM-Objekt mit einem Dual-Interface), das vom SQL Server über <b>sp_OACreate</b> (usw.) eingebunden wird.
            Der zweite Weg ist einfacher :-

            Comment


            • #7
              Hättest du nen Beispiel ...

              Comment


              • #8
                Hallo,
                angenommen, ein Automation-Objekt wird als Win32-DLL kompiliert (für das folgende Beispiel wurde Borland Delphi 7 verwendet):
                unit OSSPCOM_Impl;
                {$WARN SYMBOL_PLATFORM OFF}

                interface

                uses
                ActiveX, Mtsobj, Mtx, ComObj, OSSPCOM_TLB, StdVcl;

                type
                TOSSPCOMObj = class(TMtsAutoObject, IOSSPCOMObj)
                protected
                function Get_Daten: OleVariant; safecall;
                procedure DoWork(vInput: OleVariant; out vOutput: OleVariant); safecall;
                { Protected-Deklarationen }
                end;

                implementation

                uses ComServ;

                function TOSSPCOMObj.Get_Daten: OleVariant;
                begin
                Result := 'Zeichenkette aus dem COM+ Objekt';
                SetComplete;
                end;

                procedure TOSSPCOMObj.DoWork(vInput: OleVariant; out vOutput: OleVariant);
                begin
                vOutput := vInput + ' (ok)';
                SetComplete;
                end;

                initialization
                TAutoObjectFactory.Create(ComServer, TOSSPCOMObj, Class_OSSPCOMObj,
                ciMultiInstance, tmApartment);
                end.

                In einer SQL Server 2000-Datenbank kann dann eine Stored Procedure (oder etwas vergleichbares) das COM-Objekt aufrufen:

                <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: blue;">CREATE PROCEDURE </span>spCallCOMplusObj </p><p style="margin: 0px;">&nbsp; @sTXT <span style="color: blue;">VARCHAR</span>(50) <span style="color: blue;">OUTPUT</span></p><p style="margin: 0px;"><span style="color: blue;">AS</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">Declare </span>@Object <span style="color: blue;">int</span>, @hr <span style="color: blue;">int</span>, @RetVal <span style="color: blue;">int</span>, @iStatus <span style="color: blue;">int</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">SET </span>@iStatus = 1</p><p style="margin: 0px;">&nbsp; <span style="color: green;">-- Objektinstanz erzeugen</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">Exec </span>@hr = sp_OACreate <span style="color: maroon;">'{0E9447C4-EF22-4570-B202-45D50D3B5EFB}'</span>, @Object <span style="color: blue;">OUTPUT</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">IF </span>@hr = 0</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@iStatus = 2</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp; <span style="color: green;">-- Interface-Methode (Property) abfragen</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">Exec </span>@hr = sp_OAGetProperty @Object, <span style="color: maroon;">'Daten'</span>, @sTXT <span style="color: blue;">OUTPUT</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">IF </span>@hr=0</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@iStatus = 3</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">Exec </span>@hr = sp_OAMethod @Object, <span style="color: maroon;">'DoWork'</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">IF </span>@hr=0</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@iStatus = 4</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">Exec </span>@hr = sp_OADestroy @Object</p><p style="margin: 0px;"><span style="color: blue;">Return </span>@iStatus</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- SP zum Test aufrufen</span></p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@sTEXT <span style="color: blue;">VARCHAR</span>(50)</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@iResult <span style="color: blue;">INT</span></p><p style="margin: 0px;"><span style="color: blue;">EXEC </span>@iResult = spCallCOMplusObj @sTEXT <span style="color: blue;">OUTPUT</span></p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>@iResult,@sTEXT</p></div&gt

                Comment

                Working...
                X