Announcement

Collapse
No announcement yet.

Syntaxfehler... Nur wo? (SP)

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

  • Syntaxfehler... Nur wo? (SP)

    Guten Nachmittag!

    Ich bin gerade sowas von am verzweifeln, da ich es einfach nicht schaffe einen verdammten Fehler aus einer Zeile Code zu entfernen.

    Code:
    --***********************************************************************
    --                              GET_FIELDS
    --***********************************************************************
    CREATE PROCEDURE [dbo].[get_fields] 
    	@database_name varchar(100), 
    	@table_name varchar(100)
    AS
    BEGIN
    
      DECLARE @sqlstatement NVARCHAR(700)
      SET @sqlstatement = 
    	'select columns.COLUMN_NAME, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.NUMERIC_PRECISION, 
    	(select table_constraints.CONSTRAINT_TYPE from (' + @database_name + '.INFORMATION_SCHEMA.TABLE_CONSTRAINTS table_constraints 
    	inner join ' + @database_name + '.INFORMATION_SCHEMA.KEY_COLUMN_USAGE key_column_usage on table_constraints.CONSTRAINT_NAME = key_column_usage.CONSTRAINT_NAME)
    	where table_constraints.TABLE_NAME = '''+ @table_name + ''' and key_column_usage.COLUMN_NAME = columns.COLUMN_NAME and table_constraints.CONSTRAINT_TYPE = ''PRIMARY KEY'') as ''Primary Key'',value
    
    	FROM  '+ @database_name + '.INFORMATION_SCHEMA.COLUMNS columns LEFT JOIN ::fn_listextendedproperty(NULL,''schema'',''dbo'',''table'','''+ @table_name +''',''column'',default) as e ON  columns.COLUMN_NAME = e.objname collate SQL_Latin1_General_CP1_CI_AS	
    where columns.TABLE_NAME = ''' + @table_name + '''
    	order by columns.ORDINAL_POSITION'
    
      EXEC sp_executesql @sqlstatement
    END
    GO
    Als Fehlermeldung bekomme ich "Incoret Syntax near..." Dabei kommen immer Bereiche inerhalb von fn_listextendedproperty. Ich nehme mal stark an des es ein Fehler mit den Anführungszeichen ist, aber ich bin wohl zu unfähig den zu finden.

    Der Code selbst ist getestet und sollte funktionieren.

    Vielleicht könnte irgendjemand den Code überfliegen und mir meinen Fehler ausbessern.

    mfg

  • #2
    Tipp: Lass Dir mal der Wert von @sqlstatement ausgeben; aus der SP heraus in eine Tabelle oder den Code in Query kopieren und dann mit PRINT ausgeben.

    Das Ergebnis kannst Du dann genauer untersuchen (oder hier Posten)
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Ähm Danke

      Nur wie lass ich mir den Wert von dem SQL statement anzeigen?

      edit.

      Code:
      select columns.COLUMN_NAME, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.NUMERIC_PRECISION, 
      	(select table_constraints.CONSTRAINT_TYPE from (IDA.INFORMATION_SCHEMA.TABLE_CONSTRAINTS table_constraints 
      	inner join IDA.INFORMATION_SCHEMA.KEY_COLUMN_USAGE key_column_usage on table_constraints.CONSTRAINT_NAME = key_column_usage.CONSTRAINT_NAME)
      	where table_constraints.TABLE_NAME = 'TABLE_1' and key_column_usage.COLUMN_NAME = columns.COLUMN_NAME and table_constraints.CONSTRAINT_TYPE = 'PRIMARY KEY') as 'Primary Key',value
      
      	FROM  IDA.INFORMATION_SCHEMA.COLUMNS columns LEFT JOIN ::fn_listextendedproperty(NULL, 'schema', 'dbo', 'table', 'TABLE_1', 'column', default) as e ON  columns.COLUMN_NAME = e.objname collate SQL_Latin1_General_CP1_CI_AS
      	
      where	
      columns.TABLE_NAME = 'TABLE_1'
      
      	order by columns.ORDINAL_POSITION
      So schauts aus nachdem ich eine DB und ne Table eingetragen habe. Es läuft perfekt.
      Zuletzt editiert von TheJoe; 02.07.2008, 13:57.

      Comment


      • #4
        [highlight=SQL]DECLARE @database_name varchar(100)
        DECLARE @table_name varchar(100)

        SET @database_name = 'DataDase'
        SET @table_name = 'TableName'

        DECLARE @sqlstatement NVARCHAR(700)
        SET @sqlstatement =
        'select columns.COLUMN_NAME, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.NUMERIC_PRECISION,
        (select table_constraints.CONSTRAINT_TYPE from (' + @database_name + '.INFORMATION_SCHEMA.TABLE_CONSTRAINTS table_constraints
        inner join ' + @database_name + '.INFORMATION_SCHEMA.KEY_COLUMN_USAGE key_column_usage on table_constraints.CONSTRAINT_NAME = key_column_usage.CONSTRAINT_NAME)
        where table_constraints.TABLE_NAME = '''+ @table_name + ''' and key_column_usage.COLUMN_NAME = columns.COLUMN_NAME and table_constraints.CONSTRAINT_TYPE = ''PRIMARY KEY'') as ''Primary Key'',value
        FROM '+ @database_name + '.INFORMATION_SCHEMA.COLUMNS columns LEFT JOIN ::fn_listextendedproperty(NULL,''schema'',''dbo'', ''table'','''+ @table_name +''',''column'',default) as e ON columns.COLUMN_NAME = e.objname collate SQL_Latin1_General_CP1_CI_AS
        where columns.TABLE_NAME = ''' + @table_name + '''
        order by columns.ORDINAL_POSITION'

        --per Print: Hier kommen nur 256 Zeichen zurück
        PRINT @sqlstatement

        --per TempTable; im res
        CREATE TABLE #Result (SQLStatement varchar(4000));
        INSERT INTO #Result SELECT @sqlstatement;
        SELECT * FROM #Result;
        GO

        DROP TABLE #Result[/highlight]

        Wie im Kommentar geschrieben, kommen so 256 zeichen raus; dann fehlt was => in richtige Tabelle schreiben und dann über MM die tabelle öffnen und rauskopieren.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Danke wieder was gelernt.

          Mich verwundert nur das mein SQL Statement ohne Probleme funktioniert nur die SP geht einfach nicht...

          Comment


          • #6
            Lass mal die Leerzeile vorm "FROM" weg.

            Mit bekomme ich beim EXEC die Meldung

            Meldung 105, Ebene 15, Status 1, Zeile 6
            Öffnendes Anführungszeichen vor der Zeichenfolge 'colum'.
            Meldung 170, Ebene 15, Status 1, Zeile 6
            Zeile 6: Falsche Syntax in der Nähe von 'colum'.

            ohne nur noch.

            Meldung 170, Ebene 15, Status 1, Zeile 5
            Zeile 5: Falsche Syntax in der Nähe von 'column'.

            Jetzt wo ich Dein Result-Statement vom dynamischen SQL sehe:
            Es wird, soweit ich das einschätze, so sowieso kein Ergebnis liefern, weil Du mit

            IDA.INFORMATION_SCHEMA.KEY_COLUMN_USAGE

            auf eine andere Datenbank (namens IDA) zugreifst, während

            ::fn_listextendedproperty

            nur Properties der aktuellen DB ausliest (lesen kann).
            Damit es geht muss die SP immer in der aktuellen DB für Tabellen der aktuellen DB ausgeführt werden.
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Danke O. Helper für deine Hilfe.

              Das Problem war jedoch das ich ein kompletter Vollidiot war und für das SQL Statement zu wenig Platz vergeben hatte...

              Comment

              Working...
              X