將所有符合條件的結(jié)果拼接成一列并用逗號(hào)隔開的一個(gè)sql語(yǔ)句
更新時(shí)間:2010年06月29日 11:25:18 作者:
把所有符合條件的結(jié)果拼接成一列,用逗號(hào)隔開的一個(gè)sql語(yǔ)句。
復(fù)制代碼 代碼如下:
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
create function [dbo].[f_str](@id int) returns nvarchar(1000)
as
begin
declare @str nvarchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as nvarchar(900)) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go
--調(diào)用函數(shù)
select id , value = dbo.f_str(id) from tb group by id
運(yùn)行結(jié)果:

本來(lái)在上面的函數(shù)中所有的nvarchar都是varchar類型的,并且上面函數(shù)的紅色處在調(diào)用cast方法時(shí),并未指定長(zhǎng)度。朋友測(cè)試后發(fā)現(xiàn),結(jié)果會(huì)在30個(gè)字符 時(shí)截?cái)?,原?lái)以為是varchar和nvarchar的區(qū)別,我試著將varchar改成了nvarchar,朋友測(cè)試的結(jié)果是在54個(gè)字符處截?cái)唷N也榱讼?,是varchar的默認(rèn)長(zhǎng)度問(wèn)題,見sql server聯(lián)機(jī)叢書中下面的說(shuō)明:
char 和 varchar
固定長(zhǎng)度 (char) 或可變長(zhǎng)度 (varchar) 字符數(shù)據(jù)類型。
char[(n)]
長(zhǎng)度為 n 個(gè)字節(jié)的固定長(zhǎng)度且非 Unicode 的字符數(shù)據(jù)。n 必須是一個(gè)介于 1 和 8,000 之間的數(shù)值。存儲(chǔ)大小為 n 個(gè)字節(jié)。char 在 SQL-92 中的同義詞為 character。
varchar[(n)]
長(zhǎng)度為 n 個(gè)字節(jié)的可變長(zhǎng)度且非 Unicode 的字符數(shù)據(jù)。n 必須是一個(gè)介于 1 和 8,000 之間的數(shù)值。存儲(chǔ)大小為輸入數(shù)據(jù)的字節(jié)的實(shí)際長(zhǎng)度,而不是 n 個(gè)字節(jié)。所輸入的數(shù)據(jù)字符長(zhǎng)度可以為零。varchar 在 SQL-92 中的同義詞為 char varying 或 character varying。
注釋
如果沒有在數(shù)據(jù)定義或變量聲明語(yǔ)句中指定 n,則默認(rèn)長(zhǎng)度為 1。如果沒有使用 CAST 函數(shù)指定 n,則默認(rèn)長(zhǎng)度為 30。
將為使用 char 或 varchar 的對(duì)象被指派數(shù)據(jù)庫(kù)的默認(rèn)排序規(guī)則,除非用 COLLATE 子句另外指派了特定的排序規(guī)則。該排序規(guī)則控制用于存儲(chǔ)字符數(shù)據(jù)的代碼頁(yè)。
支持多語(yǔ)言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問(wèn)題。如果使用 char 或 varchar:
如果希望列中的數(shù)據(jù)值大小接近一致,請(qǐng)使用 char。
如果希望列中的數(shù)據(jù)值大小顯著不同,請(qǐng)使用 varchar。
如果執(zhí)行 CREATE TABLE 或 ALTER TABLE 時(shí) SET ANSI_PADDING 為 OFF,則一個(gè)定義為 NULL 的 char 列將被作為 varchar 處理。
當(dāng)排序規(guī)則代碼頁(yè)使用雙字節(jié)字符時(shí),存儲(chǔ)大小仍然為 n 個(gè)字節(jié)。根據(jù)字符串的不同,n 個(gè)字節(jié)的存儲(chǔ)大小可能小于 n 個(gè)字符。
相關(guān)文章
delete from 表名與truncate table 表名區(qū)別
delete from 表名與truncate table 表名區(qū)別,選擇適合我們的刪除數(shù)據(jù)庫(kù)數(shù)據(jù)的方法2012-10-10SQL Server 遠(yuǎn)程更新目標(biāo)表數(shù)據(jù)的存儲(chǔ)過(guò)程
這篇文章主要介紹了SQL Server 遠(yuǎn)程更新目標(biāo)表數(shù)據(jù)的存儲(chǔ)過(guò)程,適用于更新列名一致,主鍵為Int類型,具體實(shí)例代碼大家參考下本文2018-05-05行轉(zhuǎn)列之SQL SERVER PIVOT與用法詳解
這篇文章主要給大家介紹了關(guān)于行轉(zhuǎn)列之SQL SERVER PIVOT與用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL SERVER具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09實(shí)用的銀行轉(zhuǎn)賬存儲(chǔ)過(guò)程和流水號(hào)生成存儲(chǔ)過(guò)程
本篇文章給大家分享銀行轉(zhuǎn)賬存儲(chǔ)過(guò)程和流水號(hào)生成存儲(chǔ)過(guò)程,感興趣的朋友一起看看吧2015-09-09