试:
CREATE  procedure P_GetDistinct
(
@i_tableName varchar(30),
@i_Field1Name varchar(30),
@i_Field2Name varchar(30),
@i_Field2Value varchar(30),
@o_strResult varchar(600) output
)
AS
/*********************************************
  DESCRIPTION:  依据给定的字段@i_field2Name的值@i_field2Value来查询表@i_tableName,获得字段@i_field1Name的所有不同值(不包含NULL),
   将这些值以","为分割组成一字符串并返回此字符串  Example use:
declare @s varchar(600)
exec p_getDistinct1 'testa','livedregion','person','李',@s output
select @s
*********************************************/
BEGIN
declare @sql nvarchar(400)
set @o_strResult =''
if ((COLUMNPROPERTY( OBJECT_ID(@i_tableName),@i_Field1Name,'allowsnull') is not null) and (COLUMNPROPERTY( OBJECT_ID(@i_tableName),@i_Field2Name,'allowsnull') is not null))
begin
set @sql = N' select @o_strResult= @o_strResult + ' + isnull(@i_Field1Name, '') + ' + '','' from (select distinct ' + @i_Field1Name + ' FROM ' + @i_tableName + ' where ' + @i_Field2Name
if (@i_Field2Value is null)
begin
set @sql = @sql + ' is null'
end
else
begin
set @sql = @sql + ' = ''' + @i_Field2Value + ''''
end
set @sql = @sql + ') a'
print @sql
exec sp_executesql @sql,N'@o_strResult varchar(600) output',@o_strResult output
end
if @o_strResult=''
begin
set @o_strResult = null
end
else
begin
set @o_strResult = substring(@o_strResult,1,len(@o_strResult)-1)
end
end
GO

解决方案 »

  1.   

    首先谢谢 tj_dns(愉快的登山者):
    set @sql = N' select @o_strResult= @o_strResult + ' + isnull(@i_Field1Name, '') + ' + '','' from (select distinct ' + @i_Field1Name + ' FROM ' + @i_tableName + ' where ' + @i_Field2Name
    应改成:
    set @sql = N' select @o_strResult= @o_strResult + isnull(' + @i_Field1Name + ', '''') + '','' from (select distinct ' + @i_Field1Name + ' FROM ' + @i_tableName + ' where ' + @i_Field2Name现在能得到的结果是结果是 ,北京,上海,深圳可是我想得到的结果是 NULL,北京,上海,深圳
      

  2.   

    产生空格是因为你曾经在那个字段写过,但是后来又删除了,使那里留下了一个空位置
    你要想得到NULL的话,就应该删除那一行,然后在插入数据,就可以了。
      

  3.   

    第一个问题已经解决,能否看一下第二个问题:谢谢
    2、我能否得到这样的结果(不使用游标):1、NULL;2、北京;3、上海;4、深圳