2014-01-08 118 views
0

我最近被問到第一次看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 '[email protected]@SERVERNAME+' -E -d '+DB_NAME()+' -Q "exec SP_transfer @PassengerName='''[email protected]+''',@DocumentType='[email protected]+ 
',@BoardingSequenceNumber='+cast(@BoardingSequenceNumber as varchar(20))+ 
',@FlightNumber='[email protected]+',@CarrierCode='[email protected]+ 
',@DepartureTime='''+cast(@DepartureTime as varchar(20))+''',@Destination='[email protected]+ 
',@DeviceAddress='[email protected]+''',@TimeStamp='+cast(@Timestamp as varchar(32))+ 
''',@WorkstationId='[email protected]+',@DeliveredTimeStamp='''+cast(@DeliveredTimeStamp as varchar(50))+'''"'; 

我怎樣才能讓這個在passengername列替換任何撇號沒有打破觸發,但它試圖解僱過嗎?我appologies,如果這個問題似乎是愚蠢的,但我的即時通訊相當新的這條線的工作,

感謝您的時間,

克雷格

+0

直接使用存儲過程['SP_ExecuteSQL'](http://technet.microsoft.com/en-us/library/ms188001.aspx)直接傳遞參數,而不是試圖自己轉義值和搗碎他們成一個字符串。 – Bridge

回答

0

林不知道,如果你想刪除或替換選擇中的撇號。有

​​

所以視域使用的是可以去掉的選擇觸發的一撇號替換功能在SQL替換(字符串,replacestring,replacewith)。

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; 

如果你不想偏遠撇號,你可以用同樣的方法將它們加倍。

+0

我在看替換函數,但無法弄清楚當我使用聲明的名字時,sytax是如何工作的......你只是讓這個看起來如此簡單,我覺得自己像是一個傻瓜! :D非常感謝你,我會放棄這一切! :) – user3173631

+0

如果我想把它們加倍,我會不會顛倒這個順序?即@ PassengerName =替換(passengername,'','''')?謝謝 – user3173631

+0

這應該有希望給你一個想法;它不是最優雅的,但平衡它SELECT替換('o''neil','''','''''') – u07ch