2014-01-08 2 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

직접 proc ['SP_ExecuteSQL'] (http://technet.microsoft.com/en-us/library/ms188001.aspx)를 사용하여 값을 직접 이스케이프 처리하지 말고 매시 그들을 문자열로. – Bridge

답변

0

임 제거하거나 교체하려는 경우하지 않도록주의를 언급 한 바와 같이 선택의 아포스트로피.

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

그래서 당신은 당신이 트리거의 선택에 아포스트로피를 제거 할 수 있습니다 사용하는 분야에 따라 대체 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

나는 replace 함수를보고 있었지만 선언 된 이름을 사용할 때 sytax가 작동하는 방법을 알아 내지 못했습니다 ...이 모양을 너무 단순하게 만들었습니다. 누락 된 바보처럼 느껴졌습니다! : D 아주 많이 주셔서 감사합니다. :) – user3173631

+0

만약 내가 그들을 두 배로하고 싶다면 나는 순서를 바꿨을 까? 즉 @ PassengerName = replace (passengername, '', '' ')? 감사합니다 – user3173631

+0

이것은 잘하면 당신에게 아이디어를 줄 것이다; 그것의 가장 우아한 아니지만 밖으로 균형을 선택하십시오 ('o''neil', '' ',' '' '') – u07ch