Как правильно реализовать quotename в 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


Любые идеи о том, как я могу это исправить. Я был немного озадачен этим. Спасибо.

789   1  

1 ответ:

Если я правильно понял ваш вопрос (что вполне возможно), я думаю, что вы хотите:

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, плюс в некоторых случаях значения в этих полях могут быть пустыми.

Мое предложение выше обрабатывает это, сначала используя ISNULL, чтобы заменить любые нулевые значения пустой строкой, а затем используя QUOTENAME, чтобы обернуть полученное значение в double двойные кавычки.

Решающими отличиями вашего опубликованного кода являются:

  • при использовании ISNULL я заменяю NULL пустой строкой '' вместо строки, содержащей символ одинарной кавычки '''' (две последовательные одинарные кавычки в строке представляют собой экранированный литеральный символ одинарной кавычки)
  • при использовании QUOTENAME для обертывания значений в двойные кавычки я указываю строку, содержащую двойную кавычку '"' во втором параметре, вместо строки, содержащей одну кавычки ''''.

Я надеюсь, что это поможет вам - если у вас все еще есть проблемы, возможно, вы могли бы предоставить некоторые примеры строк из вашей временной таблицы #Table и выходные данные, которые вы ожидаете от запроса, чтобы люди могли помочь вам дальше.

Кроме того, не рекомендуется использовать зарезервированные ключевые слова SQL, такие как status или count в качестве имен столбцов или псевдонимов, но если это необходимо, я бы рекомендовал заключить их в квадратные скобки (т. е. [status]) Для удобства чтения (особенно в SSMS или любой IDE с подсветкой синтаксиса SQL или цветовым кодированием), как я сделал выше.

Comments

    Ничего не найдено.