Zum Inhalt springen

mit IF EXISTS eine Variable ansprechen.


skyboy

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ganz blick ich nicht was du willst :D

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :D

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...