將所有符合條件的結(jié)果拼接成一列并用逗號隔開的一個(gè)sql語句
更新時(shí)間:2010年06月29日 11:25:18 作者:
把所有符合條件的結(jié)果拼接成一列,用逗號隔開的一個(gè)sql語句。
復(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é)果:

本來在上面的函數(shù)中所有的nvarchar都是varchar類型的,并且上面函數(shù)的紅色處在調(diào)用cast方法時(shí),并未指定長度。朋友測試后發(fā)現(xiàn),結(jié)果會(huì)在30個(gè)字符 時(shí)截?cái)啵瓉硪詾槭莢archar和nvarchar的區(qū)別,我試著將varchar改成了nvarchar,朋友測試的結(jié)果是在54個(gè)字符處截?cái)?。我查了下,是varchar的默認(rèn)長度問題,見sql server聯(lián)機(jī)叢書中下面的說明:
char 和 varchar
固定長度 (char) 或可變長度 (varchar) 字符數(shù)據(jù)類型。
char[(n)]
長度為 n 個(gè)字節(jié)的固定長度且非 Unicode 的字符數(shù)據(jù)。n 必須是一個(gè)介于 1 和 8,000 之間的數(shù)值。存儲(chǔ)大小為 n 個(gè)字節(jié)。char 在 SQL-92 中的同義詞為 character。
varchar[(n)]
長度為 n 個(gè)字節(jié)的可變長度且非 Unicode 的字符數(shù)據(jù)。n 必須是一個(gè)介于 1 和 8,000 之間的數(shù)值。存儲(chǔ)大小為輸入數(shù)據(jù)的字節(jié)的實(shí)際長度,而不是 n 個(gè)字節(jié)。所輸入的數(shù)據(jù)字符長度可以為零。varchar 在 SQL-92 中的同義詞為 char varying 或 character varying。
注釋
如果沒有在數(shù)據(jù)定義或變量聲明語句中指定 n,則默認(rèn)長度為 1。如果沒有使用 CAST 函數(shù)指定 n,則默認(rèn)長度為 30。
將為使用 char 或 varchar 的對象被指派數(shù)據(jù)庫的默認(rèn)排序規(guī)則,除非用 COLLATE 子句另外指派了特定的排序規(guī)則。該排序規(guī)則控制用于存儲(chǔ)字符數(shù)據(jù)的代碼頁。
支持多語言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問題。如果使用 char 或 varchar:
如果希望列中的數(shù)據(jù)值大小接近一致,請使用 char。
如果希望列中的數(shù)據(jù)值大小顯著不同,請使用 varchar。
如果執(zhí)行 CREATE TABLE 或 ALTER TABLE 時(shí) SET ANSI_PADDING 為 OFF,則一個(gè)定義為 NULL 的 char 列將被作為 varchar 處理。
當(dāng)排序規(guī)則代碼頁使用雙字節(jié)字符時(shí),存儲(chǔ)大小仍然為 n 個(gè)字節(jié)。根據(jù)字符串的不同,n 個(gè)字節(jié)的存儲(chǔ)大小可能小于 n 個(gè)字符。
相關(guān)文章
sqlserver 快速生成漢字的首拼字母的函數(shù)(經(jīng)典)
經(jīng)常要對姓名按拼音搜索,所以需要做如下函數(shù)來快速獲取首拼,需要的朋友可以參考下2012-05-05
sql?server修改數(shù)據(jù)庫文件位置的詳細(xì)步驟記錄
在SQL?Server中可以通過一系列的步驟來更改數(shù)據(jù)庫文件的存儲(chǔ)位置,這篇文章主要給大家介紹了關(guān)于sql?server修改數(shù)據(jù)庫文件位置的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
NetBeans連接SQL server數(shù)據(jù)庫教程
這篇文章主要介紹了NetBeans連接SQL server數(shù)據(jù)庫教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
SQL SERVER 數(shù)據(jù)庫備份代碼實(shí)例
這篇文章主要介紹了SQL SERVER數(shù)據(jù)庫備份,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
SQL Server 數(shù)據(jù)庫中的收縮數(shù)據(jù)庫和文件操作
收縮數(shù)據(jù)文件通過將數(shù)據(jù)頁從文件末尾移動(dòng)到更靠近文件開頭的未占用的空間來恢復(fù)空間,在文件末尾創(chuàng)建足夠的空間后,可取消對文件末尾的數(shù)據(jù)頁的分配并將它們返回給文件系統(tǒng),本文給大家介紹SQL Server 數(shù)據(jù)庫中的收縮數(shù)據(jù)庫和文件的相關(guān)知識,一起看看吧2023-07-07
SQL?server配置ODBC數(shù)據(jù)源(本地和服務(wù)器)詳細(xì)步驟
ODBC是open database connect的縮寫,意思是開放式數(shù)據(jù)庫連接,下面這篇文章主要給大家介紹了關(guān)于SQL?server配置ODBC數(shù)據(jù)源(本地和服務(wù)器)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
sqlserver 復(fù)制表 復(fù)制數(shù)據(jù)庫存儲(chǔ)過程的方法
復(fù)制整個(gè)SqlServer數(shù)據(jù)庫的問題的比較好的方法2008-02-02

