skyboy Geschrieben 22. August 2006 Teilen Geschrieben 22. August 2006 Hallo zusammen, ich habe leider etwas Probleme mit einer SQL Programmierung und ich komme nicht auf den Fehler. Kann mir da jemand helfen? [COLOR="Red"] declare @a INT SELECT @a = SUBSTRING('/*+++HEADER',1,1) if exists (@a) [/COLOR][COLOR="Lime"]der untere Teil funktioniert, aber das obere nicht. - kann mir da jmd. helfen? [/COLOR]BEGIN PRINT 'Hurra' /* declare @Sql nvarchar(max) ,@spName nvarchar(100) declare @Parameter nvarchar(max) select @spName = 'spBedingungDel' select @Parameter = '' SELECT @Parameter = @Parameter + ' '+param.name+char(9)+case when is_output = 1 then '(IN & OUT)' else '(IN)' END+char(13)+char(10) FROM sys.all_objects AS sp INNER JOIN sys.all_parameters AS param ON param.object_id=sp.object_id WHERE (sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=@spName) ORDER BY parameter_id ASC SELECT @Sql = ISNULL(smsp.definition, ssmsp.definition) FROM sys.all_objects AS sp LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id WHERE (sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=@spName) select @Sql = '/*+++HEADER+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++' +char(13)+char(10) +char(13)+char(10) +'NAME: ' + @spName + char(13)+char(10) +char(13)+char(10) +'VERSION: 1.0' +char(13)+char(10) +char(13)+char(10) +'BESCHREIBUNG: ' +char(13)+char(10) +char(13)+char(10) +char(13)+char(10) +'Version / Datum / Autor / Bemerkung ' +char(13)+char(10) +'1.0 -- '+convert(nvarchar,getdate(),104) + ' -- Norbert Keßler -- initiale Implementierung '+char(13)+char(10) +char(13)+char(10) +'PARAMETER & AKZEPTIERTE WERTE:'+char(13)+char(10) +@Parameter +char(13)+char(10) +'VERWENDUNG IN:'+char(13)+char(10) +char(13)+char(10) +'------------------------------------------------------------------HEADER---*/' +char(13)+char(10) +replace(@Sql,'CREATE PROCEDURE', 'ALTER PROCEDURE') exec sp_executesql @sql --exec sp_addextendedproperty */ END --ELSE --BEGIN -- PRINT 'Schon da' --END Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 22. August 2006 Teilen Geschrieben 22. August 2006 declare @a INT SELECT @a = SUBSTRING('/*+++HEADER',1,1) if exists (@a) ich weiss nicht ganz was du vorhast. dein SUBSTRING liefert dir immer '/', und das weist du einer mit INT deklarierten variable zu. Return Types Returns character data if expression is one of the supported character data types. Returns binary data if expression is one of the supported binary data types. The returned string is the same type as the given expression with the exceptions shown in the table. Given expression Return type text -> varchar image -> varbinary ntext -> nvarchar auch kenne ich IF EXISTS nur in zusammenhang mit ergebnismengen, nicht variablen. du vergleichst äpfel mit birnen. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 22. August 2006 Teilen Geschrieben 22. August 2006 Hallo zusammen, ich habe leider etwas Probleme mit einer SQL Programmierung und ich komme nicht auf den Fehler. Kann mir da jemand helfen? Versuch doch einfach zu schildern, was du ueberhaupt erreichen willst ...ansonsten noch ein /* */ setzen und alles funktioniert Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
skyboy Geschrieben 22. August 2006 Autor Teilen Geschrieben 22. August 2006 Danke für deine Hilfe - ich möchte ein alle Prozeduren einen Header einbauen. wie steht ja zwischen den */ */ Gedacht ist das so - ich exportiere alle Namen in eine Excel, trage dahinter die Infos ein. Und importiere die Daten wieder in SQLS, den Cursor dafür habe ich schon, den Einbau von dem Header habe ich schon und am Rest beise ich mir grade die Zähne aus. Also Testen ob es evtl schon einen Header gibt, und die Infos innerhalb der Headers an die richtigen Stellen zu bekommen. Jetzt dachte ich das eine mit CHARINDEX und das andere mit SUBSTRING, aber wie - das kriege ich nicht auf die Reihe. cu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 22. August 2006 Teilen Geschrieben 22. August 2006 So ganz blick ich nicht was du willst Falls das Rote da oben aber sowas wie die Suche nach nem vorhandenen Header in einer Variable darstellen soll, dann kannst das in etwa wie folgt machen: declare @a varchar(100) set @a = '/*+++HEADER+++*/' if charindex('+Header+', @a) = 0 OR charindex('+Header+', @a) IS NULL BEGIN PRINT 'Hurra' END ELSE BEGIN PRINT 'Schon da' END Goos PS: War jetzt nur ein Versuch dich zu verstehen. Vielleicht bemuehst dich mit deiner Erklaerung ja noch n bissl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
skyboy Geschrieben 22. August 2006 Autor Teilen Geschrieben 22. August 2006 Sorry für die schlappe Erklärung - aber ich sitze jetzt auch schon seit um 7 vor der Kiste. Also - das was ich zwischen den /* */ habe schreibt in eine Prozedur einen Kopf rein. /*+++HEADER+++++++++++++++++++++++++++++++++++ Name: Version 1.o Beschreibung: --------------------------------------HEADER---*/ Jetzt möchte ich hinter dem 'Name:' / 'Beschreibung:' einen Text aus einer anderen Tabelle einfügen. In der Daten Tabelle stehen dann die Namen der Prozeduren, in der nächten Spalte dann die Beschreibung. Und dafür muss ich den Punkt finden an dem der neue Text rein muss, und wie ich den bekomme und wo ich das einfügen muss? Das blicke ich nämlich nicht. Ich hoffe diese Erklärung ist jetzt sinnvoller. Sinn der ganzen Übung ist es, die Dokumentation einer SQL nachträglich mit möglichst wenig Aufwand machen zu können. Und dass auch bei jeder anderen SQL DB. Thx for your help! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.