1. 程式人生 > >【特性】select語句中使用字符串鏈接獲取字段值失敗

【特性】select語句中使用字符串鏈接獲取字段值失敗

道理 使用字符串 字符串 排查 sof insert 插入 想要 val

坑1

在一個多行的表中,想把其中的一個字段值拿出來,組成一個字符串供後面使用。

按照以往,自己就如以下這麽寫了:

declare @sql varchar(8000)
set @sql=insert into XXX values(
select @sql=@sql+‘‘‘,‘‘‘+ field from YY

然後沒有得到想要的所有行的字符串,第一行之後就沒有了。

排查問題:

1. 自己仔細查看了數據,並打印出來,發現這個字段有換行。

於是自己又用replace把字段field的換行符,結果依然如此,也是,有的行裏面就沒有換行符,自己也做了驗證,那麽肯定不是這個原因了。

2. 自己猜測是字段類型的原因,查了field的字段類型:NVarChar(max),很厲害,於是自己在寫的時候就轉換了一次,使用了cast,選擇了一個合適的字符串長度,改造之後sql如下:

declare @sql varchar(8000)
set @sql=insert into XXX values(
select @sql=@sql+‘‘‘,‘‘‘+ cast(field as nvarchar(1000)) from YY

搞定!字符串完整的獲取了所有的行的字段值。

坑2:

搞定中間數據完了,之後呢,自己需要復制查詢結果到excel,不能有換行符,有換行符,excel就換行不講道理的換行。

於是,就在前面的基礎上,給field字段加上replace處理,結果又只能獲取第一行的數據了。

我試了兩種方式,在轉換之前和轉換之後都是不行的。

--轉換之前
cast(replace(replace(field,char(10),‘‘),char(13),‘‘)  as nvarchar(1000))
--轉換之後
replace(replace(cast(field  as nvarchar(1000)),char(10),‘‘),char(13),‘‘)

這個坑,自己先擱著,畢竟convert還沒有用呢,自己草草的把這個數據插入臨時表的時候自己用了replace去掉了,然後再字符串鏈接的時候,從臨時表中拿數據,就解決了。

【特性】select語句中使用字符串鏈接獲取字段值失敗