Tsql: лучший способ приведения переменных в тип строки?

Я написал процедуру tsql, которая вставляет строку в текстовый файл, что означает, что все переменные должны быть преобразованы в строку. Вместо использования аргумента case case, проще ли это сделать, охватывая все случаи и заставляя любой тип вводить тип строки?

заблаговременно

Ответ 1

All-caps - это буквальный текст, в нижнем регистре - что-то, в которое вы должны интерполировать значение:

CAST(expression AS CHAR)
-- or:
CAST(expression AS VARCHAR)

Можно указать длину.

К сожалению, это немного сложнее с datetime, если вы хотите отформатировать его каким-либо образом, отличным от представления по умолчанию.

Моя информация была получена с

Ответ 2

вам нужно конвертировать/отсылать его каждый раз. Я использовал функцию:

CREATE FUNCTION QuoteNull
(
     @InputStr      varchar(8000)  --value to force to string
)
RETURNS
varchar(8000)
AS

BEGIN
    RETURN COALESCE(''''[email protected]+'''','null')
END

он помещает одинарные кавычки вокруг значения или просто слово null, если оно равно null, но вы можете его настроить по мере необходимости.

вот версия, которая автоматически обрабатывает даты форматирования:

CREATE FUNCTION QuoteNull
(
     @InputStr      sql_variant   --value to force to string
)
RETURNS
varchar(8000)
AS

BEGIN
    DECLARE @String  varchar(8000)
    SET @String=COALESCE(''''+  CASE SQL_VARIANT_PROPERTY(@InputStr,'BaseType')
                                    WHEN 'datetime' THEN CONVERT(varchar(23),@InputStr,121)
                                    ELSE CONVERT(varchar(8000),@InputStr)
                                END
                             +'''','null')
    RETURN @String
END

Ответ 3

Я не думаю, что есть, и если бы это было так, я бы не стал им доверять, так как, вероятно, будет очень мало контроля над общим форматированием. Создайте свой собственный, и он будет выглядеть так, как нужно. Факторы, которые следует учитывать:

  • Форматирование даты
  • Числа, ведущие нули, десятичные знаки, знаки +/-
  • Длина строки, перенос слов
  • Ведущие пробелы, конечные пробелы, пробелы между строками, которые не имеют ведущих или конечных пробелов

... он продолжается и продолжается.