create procedure udsp_SelectBusinessContract
@BusinessContractNumber  nvarchar(32),
@VendorEnterpriseName nvarchar(64),
@VendeeEnterpriseName  nvarchar(64),
@SubscribeDate datetime,
@TransportationEnterpriseName nvarchar(64),
@ConsigneeEnterpriseName  nvarchar(64)
as
if datalength(rtrim(ltrim(@BusinessContractNumber)))=0
set @BusinessContractNumber=null
declare @VendorEnterpriseIndex  smallint
if datalength(rtrim(ltrim(@VendorEnterpriseName)))=0
set @VendorEnterpriseIndex=null
else
set @VendorEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendorEnterpriseName),0)
declare @VendeeEnterpriseIndex smallint
if datalength(rtrim(ltrim(@VendeeEnterpriseName)))=0
set @VendeeEnterpriseIndex=null
else 
set @VendeeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendeeEnterpriseName),0)
declare @TransportationEnterpriseIndex  smallint
if datalength(rtrim(ltrim(@TransportationEnterpriseName)))=0
set @TransportationEnterpriseIndex=null
else
set @TransportationEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@TransportationEnterpriseName),0)
declare @ConsigneeEnterpriseIndex  smallint
if datalength(rtrim(ltrim(@ConsigneeEnterpriseName)))=0
set @ConsigneeEnterpriseIndex=null
else
set @ConsigneeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@ConsigneeEnterpriseName),0)
        declare @SelectStatement nvarchar(4000)
set @SelectStatement='select bcf_Index 流水号,
     bcf_BusinessContractNumber 合同号,
     (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人,
     (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人,
     bcf_SubscribeDate 签约日期,
     (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_TransportationEnterpriseIndex) 出卖委托结算人,
     (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_ConsigneeEnterpriseIndex) 买受委托结算人
      from udot_BusinessContract where bcf_BusinessContractNumber='+isnull(''''+@BusinessContractNumber+'''','bcf_BusinessContractNumber')+' and
       bcf_VendorEnterpriseIndex='+isnull(''''+@VendorEnterpriseIndex+'''','bcf_VendorEnterpriseIndex')+' and
       bcf_VendeeEnterpriseIndex='+isnull(''''+@VendeeEnterpriseIndex+'''','bcf_VendeeEnterpriseIndex')+' and
               bcf_SubscribeDate='+convert(nvarchar(10),@SubscribeDate)+' and
       bcf_TransportationEnterpriseIndex='+isnull(''''+@TransportationEnterpriseIndex+'''','bcf_TranportationEnterpriseIndex')+' and
       bcf_ConsigneeEnterpriseIndex='+isnull(''''+@ConsigneeEnterpriseIndex+'''','bcf_ConsigneeEnterpriseIndex')
 --select @selectstatement

execute(@SelectStatement)go
exec udsp_SelectBusinessContract " "," "," "," "," "," "上面是定义的存储过程,然后最后是调用语句。但老报告下面的错误。服务器: 消息 245,级别 16,状态 1,过程 udsp_SelectBusinessContract,行 41
将 nvarchar 值 'select bcf_Index 流水号,
     bcf_BusinessContractNumber 合同号,
     (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人,
     (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人,
     bcf_SubscribeDate 签约日期,
     (select oef_Name from udsdt_OperationEnterprise where oef_Inde...不明白什么意思,哪个朋友回,帮忙看看!

解决方案 »

  1.   

    看看是不是数据类型的错误呢?强制转换为nvarchar,把相应的列的数据cast( 列明  as nvarchar)
      

  2.   

    用SQL手动赋值
    print @SelectStatement打印出来是什么东东?
      

  3.   

    create procedure udsp_SelectBusinessContract 
    @BusinessContractNumber nvarchar(32), 
    @VendorEnterpriseName nvarchar(64), 
    @VendeeEnterpriseName nvarchar(64), 
    @SubscribeDate datetime, 
    @TransportationEnterpriseName nvarchar(64), 
    @ConsigneeEnterpriseName nvarchar(64) 
    as 
    if datalength(rtrim(ltrim(@BusinessContractNumber)))=0 
    set @BusinessContractNumber=null 
    declare @VendorEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@VendorEnterpriseName)))=0 
    set @VendorEnterpriseIndex=null 
    else 
    set @VendorEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendorEnterpriseName),0) 
    declare @VendeeEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@VendeeEnterpriseName)))=0 
    set @VendeeEnterpriseIndex=null 
    else 
    set @VendeeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendeeEnterpriseName),0) 
    declare @TransportationEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@TransportationEnterpriseName)))=0 
    set @TransportationEnterpriseIndex=null 
    else 
    set @TransportationEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@TransportationEnterpriseName),0) 
    declare @ConsigneeEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@ConsigneeEnterpriseName)))=0 
    set @ConsigneeEnterpriseIndex=null 
    else 
    set @ConsigneeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@ConsigneeEnterpriseName),0) 
            declare @SelectStatement nvarchar(4000) 
    set @SelectStatement='select bcf_Index 流水号, 
        bcf_BusinessContractNumber 合同号, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人, 
        bcf_SubscribeDate 签约日期, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_TransportationEnterpriseIndex) 出卖委托结算人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_ConsigneeEnterpriseIndex) 买受委托结算人 
          from udot_BusinessContract where bcf_BusinessContractNumber='+isnull(''''+@BusinessContractNumber+'''','bcf_BusinessContractNumber')+' and 
          bcf_VendorEnterpriseIndex='+isnull(''''+@VendorEnterpriseIndex+'''','bcf_VendorEnterpriseIndex')+' and 
          bcf_VendeeEnterpriseIndex='+isnull(''''+@VendeeEnterpriseIndex+'''','bcf_VendeeEnterpriseIndex')+' and 
                bcf_SubscribeDate='+convert(nvarchar(10),@SubscribeDate)+' and 
          bcf_TransportationEnterpriseIndex='+isnull(''''+@TransportationEnterpriseIndex+'''','bcf_TranportationEnterpriseIndex')+' and 
          bcf_ConsigneeEnterpriseIndex='+isnull(''''+rtrim(@ConsigneeEnterpriseIndex)+'''','bcf_ConsigneeEnterpriseIndex') 
    --select @selectstatement execute(@SelectStatement) go 
      

  4.   

    print(@SelectStatement) 看看语句错在哪里?以下是动态SQL的基本语法,我估计你是某个地方引号搞错了.动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg: Select * from tableName 
     Exec('select * from tableName') 
     Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: 
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句正确 3. 输出参数 
    declare @num int, 
     @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
     @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  5.   

    将这段改掉,原因是isnull(''''+@VendorEnterpriseIndex+'''','bcf_VendorEnterpriseIndex')这语句
    你将@VendorEnterpriseIndex声明为smallint,但'bcf_VendorEnterpriseIndex'为字符型if datalength(rtrim(ltrim(@BusinessContractNumber)))=0 
    set @BusinessContractNumber=null 
    --declare @VendorEnterpriseIndex smallint 
    declare @VendorEnterpriseIndex nvarchar(50)if datalength(rtrim(ltrim(@VendorEnterpriseName)))=0 
    set @VendorEnterpriseIndex=null 
    else 
    set @VendorEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendorEnterpriseName),0) 
    --declare @VendeeEnterpriseIndex smallint 
    declare @VendeeEnterpriseIndex nvarchar(50)
    if datalength(rtrim(ltrim(@VendeeEnterpriseName)))=0 
    set @VendeeEnterpriseIndex=null 
    else 
    set @VendeeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendeeEnterpriseName),0) 
    --declare @TransportationEnterpriseIndex smallint 
    declare @TransportationEnterpriseIndex nvarchar(50)
    if datalength(rtrim(ltrim(@TransportationEnterpriseName)))=0 
    set @TransportationEnterpriseIndex=null 
    else 
    set @TransportationEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@TransportationEnterpriseName),0) 
    --declare @ConsigneeEnterpriseIndex smallint 
    declare @ConsigneeEnterpriseIndex nvarchar(50)
    if datalength(rtrim(ltrim(@ConsigneeEnterpriseName)))=0 
    set @ConsigneeEnterpriseIndex=null 
    else 
    set @ConsigneeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@ConsigneeEnterpriseName),0) 
            declare @SelectStatement nvarchar(4000) 
    set @SelectStatement='select bcf_Index 流水号, 
        bcf_BusinessContractNumber 合同号, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人, 
        bcf_SubscribeDate 签约日期, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_TransportationEnterpriseIndex) 出卖委托结算人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_ConsigneeEnterpriseIndex) 买受委托结算人 
          from udot_BusinessContract where bcf_BusinessContractNumber='+isnull(''''+@BusinessContractNumber+'''','bcf_BusinessContractNumber')+' and 
          bcf_VendorEnterpriseIndex='+isnull(''''+@VendorEnterpriseIndex+'''','bcf_VendorEnterpriseIndex')+' and 
          bcf_VendeeEnterpriseIndex='+isnull(''''+@VendeeEnterpriseIndex+'''','bcf_VendeeEnterpriseIndex')+' and 
                bcf_SubscribeDate='+convert(nvarchar(10),@SubscribeDate)+' and 
          bcf_TransportationEnterpriseIndex='+isnull(''''+@TransportationEnterpriseIndex+'''','bcf_TranportationEnterpriseIndex')+' and 
          bcf_ConsigneeEnterpriseIndex='+isnull(''''+@ConsigneeEnterpriseIndex+'''','bcf_ConsigneeEnterpriseIndex') 
      

  6.   

    declare @BusinessContractNumber nvarchar(32) 
    declare @VendorEnterpriseName nvarchar(64) 
    declare @VendeeEnterpriseName nvarchar(64)
    declare @SubscribeDate datetime 
    declare @TransportationEnterpriseName nvarchar(64) 
    declare @ConsigneeEnterpriseName nvarchar(64) set @BusinessContractNumber =''
    set @VendorEnterpriseName =''
    set @VendeeEnterpriseName =''
    set @SubscribeDate =''
    set @TransportationEnterpriseName =''
    set @ConsigneeEnterpriseName =''if datalength(rtrim(ltrim(@BusinessContractNumber)))=0 
    set @BusinessContractNumber=null 
    --declare @VendorEnterpriseIndex smallint 
    declare @VendorEnterpriseIndex nvarchar(50)if datalength(rtrim(ltrim(@VendorEnterpriseName)))=0 
    set @VendorEnterpriseIndex=null 
    else 
    set @VendorEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendorEnterpriseName),0) 
    --declare @VendeeEnterpriseIndex smallint 
    declare @VendeeEnterpriseIndex nvarchar(50)
    if datalength(rtrim(ltrim(@VendeeEnterpriseName)))=0 
    set @VendeeEnterpriseIndex=null 
    else 
    set @VendeeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendeeEnterpriseName),0) 
    --declare @TransportationEnterpriseIndex smallint 
    declare @TransportationEnterpriseIndex nvarchar(50)
    if datalength(rtrim(ltrim(@TransportationEnterpriseName)))=0 
    set @TransportationEnterpriseIndex=null 
    else 
    set @TransportationEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@TransportationEnterpriseName),0) 
    --declare @ConsigneeEnterpriseIndex smallint 
    declare @ConsigneeEnterpriseIndex nvarchar(50)
    if datalength(rtrim(ltrim(@ConsigneeEnterpriseName)))=0 
    set @ConsigneeEnterpriseIndex=null 
    else 
    set @ConsigneeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@ConsigneeEnterpriseName),0) 
            declare @SelectStatement nvarchar(4000) 
    set @SelectStatement='select bcf_Index 流水号, 
        bcf_BusinessContractNumber 合同号, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人, 
        bcf_SubscribeDate 签约日期, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_TransportationEnterpriseIndex) 出卖委托结算人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_ConsigneeEnterpriseIndex) 买受委托结算人 
          from udot_BusinessContract where bcf_BusinessContractNumber='+isnull(''''+@BusinessContractNumber+'''','bcf_BusinessContractNumber')+' and 
          bcf_VendorEnterpriseIndex='+isnull(''''+@VendorEnterpriseIndex+'''','bcf_VendorEnterpriseIndex')+' and 
          bcf_VendeeEnterpriseIndex='+isnull(''''+@VendeeEnterpriseIndex+'''','bcf_VendeeEnterpriseIndex')+' and 
                bcf_SubscribeDate='+convert(nvarchar(10),@SubscribeDate)+' and 
          bcf_TransportationEnterpriseIndex='+isnull(''''+@TransportationEnterpriseIndex+'''','bcf_TranportationEnterpriseIndex')+' and 
          bcf_ConsigneeEnterpriseIndex='+isnull(''''+@ConsigneeEnterpriseIndex+'''','bcf_ConsigneeEnterpriseIndex') 
    print @selectstatement 结果:
    select bcf_Index 流水号, 
        bcf_BusinessContractNumber 合同号, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人, 
        bcf_SubscribeDate 签约日期, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_TransportationEnterpriseIndex) 出卖委托结算人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_ConsigneeEnterpriseIndex) 买受委托结算人 
          from udot_BusinessContract where bcf_BusinessContractNumber=bcf_BusinessContractNumber and 
          bcf_VendorEnterpriseIndex=bcf_VendorEnterpriseIndex and 
          bcf_VendeeEnterpriseIndex=bcf_VendeeEnterpriseIndex and 
                bcf_SubscribeDate=Jan  1 190 and 
          bcf_TransportationEnterpriseIndex=bcf_TranportationEnterpriseIndex and 
          bcf_ConsigneeEnterpriseIndex=bcf_ConsigneeEnterpriseIndex
      

  7.   

    drop procedure udsp_SelectBusinessContract 
    create procedure udsp_SelectBusinessContract 
    @BusinessContractNumber nvarchar(32), 
    @VendorEnterpriseName nvarchar(64), 
    @VendeeEnterpriseName nvarchar(64), 
    @SubscribeDate datetime, 
    @TransportationEnterpriseName nvarchar(64), 
    @ConsigneeEnterpriseName nvarchar(64) 
    as 
    if datalength(rtrim(ltrim(@BusinessContractNumber)))=0 
    set @BusinessContractNumber=null 
    declare @VendorEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@VendorEnterpriseName)))=0 
    set @VendorEnterpriseIndex=null 
    else 
    set @VendorEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendorEnterpriseName),0) 
    declare @VendeeEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@VendeeEnterpriseName)))=0 
    set @VendeeEnterpriseIndex=null 
    else 
    set @VendeeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@VendeeEnterpriseName),0) 
    declare @TransportationEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@TransportationEnterpriseName)))=0 
    set @TransportationEnterpriseIndex=null 
    else 
    set @TransportationEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@TransportationEnterpriseName),0) 
    declare @ConsigneeEnterpriseIndex smallint 
    if datalength(rtrim(ltrim(@ConsigneeEnterpriseName)))=0 
    set @ConsigneeEnterpriseIndex=null 
    else 
    set @ConsigneeEnterpriseIndex=isnull((select oef_Index from udsdt_OperationEnterprise where oef_Name=@ConsigneeEnterpriseName),0) 
            declare @SelectStatement nvarchar(4000) 
    set @SelectStatement='select bcf_Index 流水号, 
        bcf_BusinessContractNumber 合同号, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendorEnterpriseIndex) 出卖人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_VendeeEnterpriseIndex) 买受人, 
        bcf_SubscribeDate 签约日期, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_TransportationEnterpriseIndex) 出卖委托结算人, 
        (select oef_Name from udsdt_OperationEnterprise where oef_Index=bcf_ConsigneeEnterpriseIndex) 买受委托结算人 
          from udot_BusinessContract where bcf_BusinessContractNumber='+isnull(''''+@BusinessContractNumber+'''','bcf_BusinessContractNumber')+' and 
          bcf_VendorEnterpriseIndex='+isnull(''''+rtrim(@VendorEnterpriseIndex)+'''','bcf_VendorEnterpriseIndex')+' and 
          bcf_VendeeEnterpriseIndex='+isnull(''''+rtrim(@VendeeEnterpriseIndex)+'''','bcf_VendeeEnterpriseIndex')+' and 
                bcf_SubscribeDate='+convert(nvarchar(10),@SubscribeDate)+' and 
          bcf_TransportationEnterpriseIndex='+isnull(''''+rtrim(@TransportationEnterpriseIndex)+'''','bcf_TranportationEnterpriseIndex')+' and 
          bcf_ConsigneeEnterpriseIndex='+isnull(''''+rtrim(@ConsigneeEnterpriseIndex)+'''','bcf_ConsigneeEnterpriseIndex') 
    --select @selectstatement 
    print @SelectStatement
    --execute(@SelectStatement) go 
    exec udsp_SelectBusinessContract " "," "," "," "," "," "