用双撇子代替撇号

时间:2014-01-08 14:32:36

标签: sql-server-2008 replace apostrophe

我最近被要求首次查看SQL,并遇到了一个我无法弄清楚并且希望寻求帮助的问题,我有两个运行Microsoft SQL Server 2008且服务器A的SQL服务器服务器B的链接服务器,

存在一个触发器,它将数据发送到存储过程,然后将插入的数据从服务器A传递到服务器B并且这个数据有名称,我面临的问题是像奥尼尔这样的名字由于撇号和我无法弄清楚如何只能从'插入'表中获取数据即时收集时用双撇号替换撇号。

我的触发器如下:

 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))+'''"';

我怎样才能使乘客名栏在不破坏扳机的情况下替换任何撇号但在尝试开火之前?如果这个问题看起来很愚蠢,我会嗤之以鼻,但正如我提到的那样,我对这项工作很陌生,

谢谢你的时间,

克雷格

1 个答案:

答案 0 :(得分:0)

我不确定您是否要删除或替换选择中的撇号。 SQL替换中有一个替换函数(string,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;

如果你不想远程撇号,你可以用同样的方法加倍。