【特性】select語句中使用字符串鏈接獲取字段值失敗
阿新 • • 發佈:2017-12-03
道理 使用字符串 字符串 排查 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語句中使用字符串鏈接獲取字段值失敗