2017-11-03 1 views
0

Bitte helfen Sie mir mit einer einfachen Formatierung einer dynamischen Zeichenfolge, die ich erstelle, damit ich mehrere Anweisungen gleichzeitig ausführen kann.Ein einfaches Zitat in einer Spalte bricht die dynamische Zeichenfolge

Hier ist der genaue Code, den ich habe, der bricht, wenn der Spaltenwert ein einfaches Anführungszeichen hat und ich den Spaltentext nicht mit dem richtigen Zitat umbrechen kann. Ich versuchte mit doppelten Anführungszeichen und quotename Funktion, aber keine funktionierte.

declare @str varchar(max) 
set @str = '' 

declare @addgo varchar(20) 
set @addgo = 'GO' 

declare @newline varchar(50) 
set @newline = char(13)+char(10) 

select @str = coalesce(@str, '') + 'sp_addmessage @msgnum = ' + convert(varchar(50), error) + ' , @severity = 16' + ', @msgtext = N''' + "description" + '''' 
       + @newline + @addgo + @newline from [msdb].dbo.sysmessages 
       where error = '777970005' 
print @str 

Ergebnis:

sp_addmessage @msgnum = 777970005 ,@severity = 16,@msgtext = N'Management group with id '%s' is not a member of this Data Warehouse or you do not have permissions to perform actions for that management group' 
GO 
+0

Sie doppelte Anführungszeichen für Ihre dynamische Anweisung verwenden könnte oder Anführungszeichen ersetzen, indem sie zu verdoppeln, wo Sie erwarten sie zu sein. –

Antwort

0

Wie @KamilG sagte, verwenden Sie die replace Funktion:

select @str= coalesce(@str,'')+'sp_addmessage @msgnum = '+convert(varchar(50),error)+' ,@severity = 16'+',@msgtext = N'''+replace(description,'''','''''')+'''' 
+ @[email protected][email protected] from [msdb].dbo.sysmessages 
+0

Danke Kamil & Sam für Ihre Vorschläge. es hat wie ein Charme funktioniert :) –

Verwandte Themen