要把字符串中的每个字符插入一个表中当做一行,
如字符串 str="my'sql数据库2000"
插入表后变成:
a(字段)
-----------
m
y
'
s
q
l



2
0
0
0
-----------想了想不知除了循环外还有什么方法更效率些,期待高手,谢谢了!

解决方案 »

  1.   

    if object_id('tb') is not null drop table tb 
     go 
    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
    if object_id('dbo.f_str') is not null drop function dbo.f_str
     go 
    create function dbo.f_str(@id int) 
    returns varchar(100)
    as
    begin
        declare @str varchar(1000)
        select @str = isnull(@str + ',','') + cast(value as varchar) from tb where id = @id
        return @str
    end
    go--调用函数
    select id , value = dbo.f_str(id) from tb group by iddrop function dbo.f_str
    drop table tb
    /*
    id          value
    ----------- ----------------------------------------------------------------------------------------------------
    1           aa,bb
    2           aaa,bbb,ccc(2 行受影响)
    */
      

  2.   

    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([a] [nvarchar](10))
    INSERT INTO [tb]
    SELECT 'm' UNION ALL
    SELECT 'y' UNION ALL
    SELECT 's' UNION ALL
    SELECT 'q' UNION ALL
    SELECT 'l' UNION ALL
    SELECT '数' UNION ALL
    SELECT '据' UNION ALL
    SELECT '库' UNION ALL
    SELECT '2' UNION ALL
    SELECT '0' UNION ALL
    SELECT '0' UNION ALL
    SELECT '0'--SELECT * FROM [tb]-->SQL查询如下:
    IF OBJECT_ID('dbo.f_str') IS NOT NULL
        DROP FUNCTION dbo.f_str
    GOCREATE FUNCTION dbo.f_str()
    RETURNS VARCHAR(100)
    AS
    BEGIN
    DECLARE @str VARCHAR(1000)
    SELECT @str = ISNULL(@str, '')+CAST(a AS VARCHAR) 
    FROM tb 
    RETURN @str
    END
    GO
    --调用函数
    SELECT DISTINCT a = dbo.f_str() 
    FROM tb 
    /*
    a
    ----------------------------------------------------------------------------------------------------
    mysql数据库2000(1 行受影响)
    */
      

  3.   

    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([a] [nvarchar](10))
    INSERT INTO [tb]
    SELECT 'm' UNION ALL
    SELECT 'y' UNION ALL
    SELECT '''' UNION ALL
    SELECT 's' UNION ALL
    SELECT 'q' UNION ALL
    SELECT 'l' UNION ALL
    SELECT '数' UNION ALL
    SELECT '据' UNION ALL
    SELECT '库' UNION ALL
    SELECT '2' UNION ALL
    SELECT '0' UNION ALL
    SELECT '0' UNION ALL
    SELECT '0'--SELECT * FROM [tb]-->SQL查询如下:
    DECLARE @str VARCHAR(40)
    SELECT @str=ISNULL(@str,'')+a FROM tb 
    PRINT @str
    --my'sql数据库2000
      

  4.   


    DECLARE @str VARCHAR(100)
    SET @str = 'my''sql数据库2000'
    SELECT number , SUBSTRING(@str,number+1,1)
    FROM [master]..spt_values b 
    WHERE LEN(@str) > b.number  AND TYPE='p'number      
    ----------- ----
    0           m
    1           y
    2           '
    3           s
    4           q
    5           l
    6           数
    7           据
    8           库
    9           2
    10          0
    11          0
    12          0(13 行受影响)
      

  5.   

    谢谢你们了,用了fanzhouqi的方法