Lynn Nicholson
У меня был похожий вопрос о том, как использовать экспорт SQLCMD в CSV результатов запроса, данные которого могут содержать кавычки и запятые в качестве части выходных данных. Чтобы справиться с необязательными потребностями экранирования и цитирования, я знал, что мой запрос будет слишком длинным для встроенного включения в вызов SQLCMD. Я считаю, что опция-i позволит вам поместить запрос в его собственный файл, но я решил использовать хранимую процедуру.
Я создал следующую пользовательскую скалярную функцию:
USE [MyDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Lynn Nicholson
-- Create date: 08/16/2018
-- Description: Prep a value for output to CSV file
-- =============================================
ALTER FUNCTION [dbo].[CSV]
(
@text varchar(4000)
)
RETURNS varchar(4000)
AS
BEGIN
DECLARE @escaped varchar(4000)
SELECT @escaped = @text
IF (CHARINDEX(',', @text) + CHARINDEX('"', @text)) > 0 -- if our text has a comma or single quote
BEGIN
SET @escaped = CONCAT('"', REPLACE(@escaped, '"', '""'), '"') -- double-up any quotes in the text and surround with quotes.
END
RETURN @escaped
END
И учитывая этот запрос:
SELECT firstName, lastName, notes FROM client
Вы вызываете функцию prep следующим образом:
SELECT dbo.CSV(firstName) as firstName, dbo.CSV(lastName) as lastName, dbo.CSV(notes) as notes FROM client
"ДБО" - это очень важно.
Используйте на свой страх и риск ymmv и т. д.