Было бы неплохо узнать ваши типы данных. Но обычно ставьте varchar в двойных кавычках. Вот основная идея:
select customer_id, '"' + customer_name + '"', salesrep_id from customer where customer_id=106866
Я обычно сам хочу явно создать строку csv, поэтому мои выборки обычно выглядят так:
select '"' + customer_id + '","' + customer_name + '"," + salesrep_id + '"' from customer where customer_id=106866
Если есть столбцы, которыечисла, затем я конвертирую столбец в varchar и не ставлю вокруг него двойные кавычки.
На основании ваших комментариев:
Вот файл .cmd, который я использую в производстве для созданияCSV-файл:
set proc=NoBillsReport
sqlcmd -E -S win11.net.davisbrownlaw.com -d ProLaw -Q "exec %proc%" -h -1 -W > "c:\2019\no-bills.csv"
Он использует хранимую процедуру и перенаправляет вывод вместо того, чтобы пытаться заставить SQL сделать вывод. Вот упрощенная версия моей хранимой процедуры:
--Header row
select '"Matter ID","Client Sort","Matter Description","Billing Initials","Area of Law","Fees No-Billed","Costs No-Billed"'
-- Costs that were no-billed in previous month
select '"' + matterid + '","' + clientsort + '","' + shortdesc + '","'
+ initials + '","' + areaoflaw + '",' + convert(varchar(50),nobilled_fees)
+ ',' + convert(varchar(50),nobilled_costs)
from Matters
и ее вывод:
"Matter ID","Client Sort","Matter Description","Billing Initials","Area of Law","Fees No-Billed","Costs No-Billed"
"70441233","ACME","Closing Wheel, Whenever","LA","IP",0.00,7.98
, которая прекрасно работает как содержимое файла .csv.
Хранимая процедура хороша тем, что она не должна помещаться в 1 длинную командную строку. Но, для вашего использования, я думаю, у этого есть шанс на работу:
sqlcmd -S . -d MYDB -E -Q "set nocount on; select '""customer_id"",""customer_name"",""salesrep_id""'; select convert(varchar(50),customer_id) + ',""' + customer_name + '"",""' + salesrep_id + '""' from customer where customer_id=106866; " -h -1 -W > C:\customer.csv
Обратите внимание, что это вызывается из файла .cmd. Двойные двойные кавычки могут отличаться, если они вызываются напрямую из командной строки. Кроме того, в моей системе , 11 пробелов после ;
в конце строки sql необходимы из-за того, как объединяются двойные двойные кавычки. И да, есть одинарные кавычки и двойные двойные кавычки повсюду. Основываясь на дальнейших комментариях, вот как я пишу файл .cmd для извлечения года, месяца, дня:
:: Get current year/month/day
for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('"echo.|date"') do (
for /f "tokens=1-3 delims=/.- " %%A in ("%Date:* =%") do (
set %%a=%%A&set %%b=%%B&set %%c=%%C)
)
)
set /a "yy=10000%yy% %% 10000 %% 2000 + 2000,mm=100%mm% %% 100,dd=100%dd% %% 100"
:: Pad with leading zeros if needed
set mm=0%mm%
set mm=%mm:~-2%
set dd=0%dd%
set dd=%dd:~-2%
Тогда ваше имя файла будет "customer%yy%%mm%%dd%.csv"