Заменить Апостроф двойным Апострофом
Меня недавно попросили изучить 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;
Если вы не хотите удалять апострофы, вы можете удвоить их таким же образом.