嗨,
如何根据数值在输出结果中添加双引号?
我已经试过了,这很有效:select quotename(Customer_Name,'""')
然而,我不想为每一列放。但是根据查询输出的值,如果值中包含字母,那么结果应该加上引号,如果结果是数字,则不需要引号。
这在sql中是否可以实现?
你好 ,
非常感谢你在这里发帖。
请参考以下内容,并检查它是否对你有帮助。
CREATE TABLE Customer
(
Customer_Name varchar(50) NOT NULL
);
GO
INSERT INTO Customer values
('DB Manager12'),
('IT Director'),
('3346');
select IIF(isnumeric(Customer_Name)=1,Customer_Name,quotename(Customer_Name,char(34))) from testdb.dbo.Customer
BCP命令如下。
BCP "select IIF(isnumeric(Customer_Name)=1,Customer_Name,quotename(Customer_Name,char(34))) from testdb.dbo.Customer" queryout "d:\test.txt" -c -t"," -T
输出。
Best regards
Melissa
11月热点问题 -- 事务日志满了怎么办?
11月热点问题 -- 如何将Profiler跟踪转换为SQL Server表
在一些记录的案例中似乎效果不好:
insert into Customer values
('.'),
('+'),
('-'),
('$')
是为了导出数据吗?那就使用导入/导出向导,它有一个选项,就是将文本嵌入双引号中的功能
谢谢你的回答。我不能使用SSIS,需要使用一个控制台c#应用程序。
我正在尝试使用BCP
但取决于查询输出的值
这对我来说是没有意义的。你不想把你的决定建立在一个列的值上,而是建立在这个列本身上。想象一下这样的情况:你有一个描述列,它被打成了VARCHAR。在你的结果集的第一行,该列的值是 10
,而第二行的值是 Bike
。你不希望对第二行进行双引号,而不对第一行进行双引号,因为这将扰乱解析数据的尝试。如果这些数据被传递给其他的代码,它将不得不处理所有列中的双引号,即使该列不是整体,因为引号有可能在那里,也有可能不在。
在我看来,正确的做法是看一下列的类型。如果它是文本的,那么就用双引号包住它。行中的基本值并不相关。当然,对于NULL,你可能只是让它保持NULL。
也可以试试这样的东西:
select case when try_cast(MyColumn1 as float) is not null then MyColumn1 else quotename(MyColumn1, '"') end
from MyTable
也请看 ISNUMERIC 。
但你也可以在C#中对数据进行格式化。
如果你想用BCP导出数据,并希望某些列被引用,这可以通过格式文件实现。不过所有行的结果都是一样的。
我的网站上有一篇关于使用批量加载和格式文件的文章; http://www.sommarskog.se/bulkload.html