CREATE PROCEDURE se_VipMember 
@Flag nvarchar(255),
@Cardtype intASdeclare @sql nvarchar(4000)
set @sql=N'select top 100'+ 
         N'Member_ID,'+
         N'Member_Name [姓名,'+
         N'Brand_Name 卡[号类型],'+
         N'Member_CardNO [卡号],'+
         N'Member_RegionID,'+
         N'Region_Name [大区],'+
         N'City_Name [城市],'+
         N'Member_Date [审核日期],'+
         N'Member_AuditFlag [审核状态]'+
         N'from SP_VIP_Member a join SP_City b'+
         N'on a.Member_CityID=b.City_ID'+
         N'join SP_Region c'+
         N'on a.Member_RegionID=c.Region_ID'+
         N'join SP_Brand d'+
         N'on a.Member_VIPID=d.Brand_ID'if @Flag is not null and ltrim(rtrim(@Flag))<>''  
set @sql=@sql+N'where Region_Name='''+@Flag+ N''' and Member_AuditFlag=''0'''
if @Cardtype is not null and ltrim(rtrim(@Cardtype))<>'' 
set @sql=@sql+N'where Member_VIPID='+convert(nvarchar,@Cardtype)+N'and Member_AuditFlag=''0'''exec(@sql)GO

解决方案 »

  1.   

    少加了个"]"
    CREATE PROCEDURE se_VipMember 
    @Flag nvarchar(255),
    @Cardtype intASdeclare @sql nvarchar(4000)
    set @sql=N' select top 100'+ 
             N' Member_ID,'+
             N' Member_Name [姓名],'+
             N' Brand_Name 卡[号类型],'+
             N' Member_CardNO [卡号],'+
             N' Member_RegionID,'+
             N' Region_Name [大区],'+
             N' City_Name [城市],'+
             N' Member_Date [审核日期],'+
             N' Member_AuditFlag [审核状态]'+
             N' from SP_VIP_Member a join SP_City b'+
             N' on a.Member_CityID=b.City_ID'+
             N' join SP_Region c'+
             N' on a.Member_RegionID=c.Region_ID'+
             N' join SP_Brand d'+
             N' on a.Member_VIPID=d.Brand_ID'if @Flag is not null and ltrim(rtrim(@Flag))<>''  
    set @sql=@sql+N' where Region_Name='''+@Flag+ N''' and Member_AuditFlag=''0'''
    if @Cardtype is not null and ltrim(rtrim(@Cardtype))<>'' 
    set @sql=@sql+N' where Member_VIPID='+convert(nvarchar,@Cardtype)+N'and Member_AuditFlag=''0'''exec(@sql)GO
      

  2.   

    如果@Flag和@Cardtype这两个条件不是分开的,应该这样:
    CREATE PROCEDURE se_VipMember 
    @Flag nvarchar(255),
    @Cardtype intASdeclare @sql nvarchar(4000)
    set @sql=N' select top 100'+ 
             N' Member_ID,'+
             N' Member_Name [姓名],'+
             N' Brand_Name 卡[号类型],'+
             N' Member_CardNO [卡号],'+
             N' Member_RegionID,'+
             N' Region_Name [大区],'+
             N' City_Name [城市],'+
             N' Member_Date [审核日期],'+
             N' Member_AuditFlag [审核状态]'+
             N' from SP_VIP_Member a join SP_City b'+
             N' on a.Member_CityID=b.City_ID'+
             N' join SP_Region c'+
             N' on a.Member_RegionID=c.Region_ID'+
             N' join SP_Brand d'+
             N' on a.Member_VIPID=d.Brand_ID'set @sql=@sql+N' where 1>0 '
    if @Flag is not null and ltrim(rtrim(@Flag))<>''  
    set @sql=@sql+N' and Region_Name='''+@Flag+ N''' and Member_AuditFlag=''0'''
    if @Cardtype is not null and ltrim(rtrim(@Cardtype))<>'' 
    set @sql=@sql+N' and Member_VIPID='+convert(nvarchar,@Cardtype)+N' and Member_AuditFlag=''0'''exec(@sql)GO
      

  3.   

    nchar、nvarchar 和 ntext 的用法分别与 char、varchar 和 text 的用法一样,但在以下方面不同: Unicode支持的字符范围更大。
    存储 Unicode 字符所需要的空间更大。
    nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。
    Unicode 常量使用 N 开头来指定:N'A Unicode string'。
    所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 
      

  4.   

    declare @sql nvarchar(4000)就是因为这里的@sql变量是nvarchar类型,所以必须用N'xxx'这种形式是吗????如果@Flag和@Cardtype这两个条件不是分开的    这句话怎么理解???set @sql=@sql+N' where 1>0 '      这句有什么作用???
      

  5.   

    vivianfdlpw   走了吗???那下次你再告诉我吧,谢谢你哦!