Заменить Апостроф двойным Апострофом

Меня недавно попросили изучить SQL в первый раз, и я столкнулся с проблемой, которую я не могу выяснить, и надеялся обратиться за помощью, у меня есть два сервера SQL, оба работают под управлением Microsoft SQL Server 2008, а сервер A имеет связанный сервер на сервер B,

существует триггер, который отправляет данные в хранимую процедуру, которая затем передает данные о вставке с сервера A на сервер B, и у этих данных есть имена, проблема, с которой я сталкиваюсь, заключается в том, что такие имена, как O'Neil, терпят неудачу из-за апострофа, и я Не могу понять, как заменить апостроф двойным апострофом, когда собираемые им данные доступны только из таблицы "вставлено".

мой триггер выглядит следующим образом:

 SELECT @PassengerName=PassengerName, @DocumentType=DocumentType, @BoardingSequenceNumber=BoardingSequenceNumber,
        @FlightNumber=FlightNumber, @CarrierCode=CarrierCode, @DepartureTime=DepartureTime, @Destination=Destination, @DeviceAddress=DeviceAddress, 
        @Timestamp="Timestamp", @WorkstationId=WorkstationId, @DeliveredTimeStamp=DeliveredTimeStamp from inserted;

SELECT @cmd = 'sqlcmd -S '+@@SERVERNAME+' -E -d '+DB_NAME()+' -Q "exec SP_transfer @PassengerName='''+@PassengerName+''',@DocumentType='+@DocumentType+
',@BoardingSequenceNumber='+cast(@BoardingSequenceNumber as varchar(20))+
',@FlightNumber='+@FlightNumber+',@CarrierCode='+@CarrierCode+
',@DepartureTime='''+cast(@DepartureTime as varchar(20))+''',@Destination='+@Destination+
',@DeviceAddress='+@DeviceAddress+''',@TimeStamp='+cast(@Timestamp as varchar(32))+
''',@WorkstationId='+@WorkstationId+',@DeliveredTimeStamp='''+cast(@DeliveredTimeStamp as varchar(50))+'''"';

Как я могу сделать так, чтобы столбец имени пассажира заменял любые апострофы, не нажимая на курок, но до того, как он попытается выстрелить? Я прошу прощения, если этот вопрос кажется глупым, но, как я уже говорил, я довольно новичок в этой области работы,

Спасибо за ваше время,

Craig

1 ответ

Решение

Я не уверен, хотите ли вы удалить или заменить апострофы в списке. В SQL replace есть функция replace (строка, replacestring, replacewith)

SELECT  replace('test','est', 'aste')
returns 
Taste

Таким образом, в зависимости от полей, которые вы используете, вы можете удалить апострофы при выборе триггера.

SELECT  
    @PassengerName=replace(PassengerName,'''',''),
    @DocumentType=replace(DocumentType,'''',''),
    @BoardingSequenceNumber=replace(BoardingSequenceNumber,'''',''),
    @FlightNumber=replace(FlightNumber,'''',''),
    @CarrierCode=replace(CarrierCode,'''',''),
    @DepartureTime=replace(DepartureTime,'''',''),
    @Destination=replace(Destination,'''',''),
    @DeviceAddress=replace(DeviceAddress,'''',''),
    @Timestamp="Timestamp",
    @WorkstationId=WorkstationId,
    @DeliveredTimeStamp=DeliveredTimeStamp 
from inserted;

Если вы не хотите удалять апострофы, вы можете удвоить их таким же образом.

Другие вопросы по тегам