2016-11-03 1 views
2

배경 정보 :SQL Server에서 정확하게 이름을 어떻게 구현합니까?

SSRS 보고서를 채우는 저장 프로 시저가 있습니다. SSRS 보고서는 실행되어 CSV로 내보내집니다. 그런 다음 텍스트 파일로 열리고 3 자 공급 업체 응용 프로그램을 통해 실행됩니다.

교과서의 출력은 다음과 같아야합니다

lid, status, i_flag,Count, pDate, iDate 
    62558633,"Text Value","08/16",11,"08/16","08/16" 
    78013526,"Text Value","",,"08/16""08/16" 

내 결과는 다음과 같다 :

lid, status, i_flag,Count,pDate,iDate 
    19007442,"'Dir,MgmtII'",'',2,'','02/16' 
    17343623,'Text','',0,'11/15','02/16' 

지금 내가 사용하는 코드는 다음과 같습니다

SELECT 
    quotename(isnull(i_flag,''''), '''') as i_flag, 
    isnull(lid, 0) as lid, 
    quotename(isnull(status,''''), '''') as status, 
    isnull(Count, 0) as Count, 
    quotename(isnull(p_Date,''''), '''') as p_Date, 
    quotename(isnull(i_Date,''''), '''') as i_Date 
FROM 
    #Table 

해결 방법에 대한 아이디어. 이것에 조금 비틀 렸습니다. 감사. 내가 제대로 (나는 아마도 아니에요 함) 귀하의 질문을 이해 해요 경우

+3

QUOTENAME의 역할에 대해 혼란 스러울 수도 있습니다. https://msdn.microsoft.com/en-us/library/ms176114.aspx 식별자를 올바르게 구성하는 데 사용됩니다. –

+0

그 링크를 보았습니다. 다음 코드를 사용하여 프로 시저를 작성하기 전에 테스트를 수행했습니다. Declare @text varchar (10) = 'Name' SELECT QUOTENAME (@Text, ' ""') 죄송합니다. SQL 스 니펫을 추가하는 방법을 모르겠습니다. 그러나 그런 종류의 일은 내가 한 일을 성취한다. 내 쿼리에서 반환 된 행 주위에 큰 따옴표를 추가하려고합니다. 행이 null 인 경우에도. – user6780741

+0

"행이 null 인 경우에도"의미하지는 않습니다. NULL 행과 같은 것은 없습니다. 나는 당신이 출력물로 원하는 것을 포맷팅하는 것을 이해하지 못합니다. 빈 문자열로 NULL을 처리하려고합니다. 그 때문에 4가 아닌 2 개의 작은 따옴표를 사용해야합니다. –

답변

3

, 나는 당신이 원하는 생각 : 당신은 당신이 이중으로 포장하고자하는 분야에서 일부 값을 가지고있는 것처럼

SELECT 
    QUOTENAME(ISNULL(i_flag,''), '"') AS i_flag, 
    ISNULL(lid, 0) AS lid, 
    QUOTENAME(ISNULL([status],''), '"') AS [status], 
    ISNULL([Count], 0) AS [Count], 
    QUOTENAME(ISNULL(p_Date,''), '"') AS p_Date, 
    QUOTENAME(ISNULL(i_Date,''), '"') AS i_Date 
FROM 
    #Table 

그것은 소리 CSV로 내보내기위한 목적으로 "을 인용하고, 경우에 따라이 필드의 값이 NULL 일 수 있습니다.

위의 제안은 먼저 ISNULL을 사용하여 NULL 값을 빈 문자열로 대체 한 다음 QUOTENAME을 사용하여 결과 값을 큰 따옴표로 묶는 방법으로 처리합니다.

게시 된 코드에 중요한 차이

은 다음과 같습니다

  • 내가 빈 문자열 '' 대신 문자열 내 '''' (두 개의 연속적인 작은 따옴표 대표 작은 따옴표 문자가 포함 된 문자열로 NULL을 대체 ISNULL를 사용하여
  • QUOTENAME을 사용하여 큰 따옴표로 값을 싸는 경우 작은 따옴표 문자 ''''이 포함 된 문자열 대신 두 번째 매개 변수에 큰 따옴표 '"'이 포함 된 문자열을 지정합니다.

는 나는 당신을 도움이되기를 바랍니다 - 그래도 문제가 있다면, 아마도 당신은 당신의 #Table 임시 테이블에서 일부 샘플 행을 제공 할 수 및 쿼리에서 기대하고있는 출력은 사람들이 더 당신을 도울 수 있습니다. 여담으로

, 그것은 열 이름이나 별칭으로 status 또는 count 같은 SQL 예약 키워드를 사용하는 것이 좋습니다 아니지만, 당신이해야하는 경우, 내가 SSMS 특히 (읽기 쉽 (즉 [status]) 괄호로 묶어 권 해드립니다 또는 SQL 신텍스 강조 또는 색상 코딩을 사용하는 모든 IDE).

+1

설명과 함께 코드를 보내 주셔서 감사합니다! – user6780741

+0

[user6780741] (http://stackoverflow.com/users/6780741/user6780741) 환영합니다. 여기에서 기고하기 시작 했으므로 기쁘게 생각합니다. – 3N1GM4