Announcement

Collapse
No announcement yet.

Probleme mit Stored Procedures

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

  • Probleme mit Stored Procedures

    Guten Abend!

    Vorweg ich habe noch nicht wirklich viele Erfahrungen mit Stored Procedures gemacht. Ich habe mehr mit Oracles PL/SQL Scripts gewerkelt.

    Also:
    Ich stehe vor folgendem Problem:

    Ich brauche Stored Procedures die Namen der Datenbanken, Namen der Tabellen der einzelnen Datenbanken und Namen der Columns zurückliefern.

    Ich habe schonmal ein wenig gepasstelt aber so wirklich gehen tut nichts...

    Also das sind die 3 Funktionen die ich bisher geschrieben habe. Bitte habt Mitleid es sind meine ersten Stored Procedures.

    CREATE Procedure dbo.get_databases(@fieldname VARCHAR(20))
    BEGIN
    SELECT
    name
    FROM
    sys.databases;
    END;

    CREATE Procedure dbo.get_tables(@dat_name VARCHAR(20), @fieldname VARCHAR(20))
    BEGIN
    USE @dat_name;
    SELECT
    name
    FROM
    sys.objects
    WHERE
    type_desc='USER_TABLE'
    AND
    object_id IS IN (SELECT DISTINCT object_id FROM sys.columns WHERE name = @fieldname);
    END;

    CREATE Procedure dbo.get_fields(@dat_name VARCHAR(20), @tab_name VARCHAR(20))
    BEGIN
    USE @dat_name;
    SELECT
    sys.columns.name,TYPE_NAME(sys.columns.user_type_i d)AS column_type,sys.columns.max_length
    FROM
    sys.columns
    WHERE
    sys.columns.object_id IS IN (SELECT DISTINCT sys.tables .object_id FROM sys.tables WHERE name = @tab_name;
    END;

    Vielleicht könnte mir jemand helfen die FUnktionen lauffähig zu machen!

    mfg

    TheJoe

  • #2
    Hallo,

    USE @dat_name;
    Die Ursache der Schwierigkeiten liegt darin, dass USE keine T-SQL-Anweisung ist, sondern nur von den Microsoft-Tools wie ISQL, OSQL, SQLCMD, Query Analyzer beziehungsweise dem SQL Server 2005 Management Studio interpretiert wird. Daher zeigt USE auch nur in Stapelanweisungen die gewünschte Wirkung, die von einem der oben genannten Tools ausgeführt werden.

    Comment


    • #3
      Die SPs sollten wie folgt aussehen:

      Code:
      CREATE Procedure dbo.get_tables(@dat_name VARCHAR(20), @fieldname VARCHAR(20))
      AS
      SELECT name
      FROM sys.objects
      WHERE type_desc='USER_TABLE'
      AND object_id IN (SELECT object_id FROM sys.databases WHERE name=@dat_name)
      AND object_id IN (SELECT object_id FROM sys.columns WHERE name = @fieldname)
      Code:
      CREATE Procedure dbo.get_fields(@dat_name VARCHAR(20), @tab_name VARCHAR(20))
      AS
      SELECT sys.columns.name,
                   TYPE_NAME(sys.columns.user_type_id) AS column_type,
                   sys.columns.max_length
      FROM sys.columns
      WHERE object_id IN (SELECT object_id FROM sys.databases WHERE name =@DBName)
      AND sys.columns.object_id IN (SELECT object_id FROM sys.tables WHERE name = @tab_name)

      Comment

      Working...
      X