问下关于sql函数的问题

郑先锋 2017-08-15 03:05:00
这里现在有一个函数
create    FUNCTION [dbo].scd_dysh(@wlbh varchar(50),@ysmc varchar(50),@gg varchar(50))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + yssh+':'+zsl+dw ---类型转换
FROM wlck_sh where wlbh=@wlbh and gg=@gg and ysmc=@ysmc
RETURN STUFF(@str, 1, 1, '')
END


这个表wlck_sh 就是放一些和上面一样的字段的信息,还有一些数字,比如什么数量之类的
现在
select yssh=dbo.scd_dysh(b.wlbh,ysmc,gg) from 表
但是会出现从数据类型 varchar 转换为 numeric 时出错。
有谁告诉下是哪里出错吗
...全文
194 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
郑先锋 2017-08-17
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
[quote=引用 5 楼 qq_16580279 的回复:] [quote=引用 3 楼 sinat_28984567 的回复:]
CREATE    FUNCTION [dbo].scd_dysh
    (
      @wlbh VARCHAR(50) ,
      @ysmc VARCHAR(50) ,
      @gg VARCHAR(50)
    )
RETURNS VARCHAR(8000)
AS
    BEGIN
        DECLARE @str VARCHAR(8000)
        SET @str = ''
        SELECT  @str = @str + ',' + RTRIM(yssh) + ':' +  RTRIM(zsl) +  RTRIM(dw)  ---类型转换
        FROM    wlck_sh
        WHERE   RTRIM(wlbh) = @wlbh
                AND RTRIM(gg) = @gg
                AND RTRIM(ysmc) = @ysmc
        RETURN STUFF(@str, 1, 1, '')
    END
最好确定一下是那个字段造成的这个问题……
这样好像行,我看了下,里面的参数有些是空的,比如那个gg,其他两个都不为空的情况下,就他为空[/quote] 恩对于空的做个为空的判断[/quote] 最后虽然找到真正的原因了,但是层主这个答案给了我很大的启发
凡人皆侑一死 2017-08-17
  • 打赏
  • 举报
回复
应该是这两个吧isnull() ,cast()
繁花尽流年 2017-08-15
  • 打赏
  • 举报
回复
引用 2 楼 qq_16580279 的回复:
[quote=引用 1 楼 zengertao 的回复:] LZ先确定下wlck_sh表里用到的条件字段和查询字段是否有非字符型,有的话转换下
有两个数字型,其他都是varchar类型,但是数字型和上面函数那三个字段并没有什么关联[/quote] yssh、zsl、dw这3个有非字符型最好转换成字符型。
二月十六 版主 2017-08-15
  • 打赏
  • 举报
回复
引用 5 楼 qq_16580279 的回复:
[quote=引用 3 楼 sinat_28984567 的回复:]
CREATE    FUNCTION [dbo].scd_dysh
    (
      @wlbh VARCHAR(50) ,
      @ysmc VARCHAR(50) ,
      @gg VARCHAR(50)
    )
RETURNS VARCHAR(8000)
AS
    BEGIN
        DECLARE @str VARCHAR(8000)
        SET @str = ''
        SELECT  @str = @str + ',' + RTRIM(yssh) + ':' +  RTRIM(zsl) +  RTRIM(dw)  ---类型转换
        FROM    wlck_sh
        WHERE   RTRIM(wlbh) = @wlbh
                AND RTRIM(gg) = @gg
                AND RTRIM(ysmc) = @ysmc
        RETURN STUFF(@str, 1, 1, '')
    END
最好确定一下是那个字段造成的这个问题……
这样好像行,我看了下,里面的参数有些是空的,比如那个gg,其他两个都不为空的情况下,就他为空[/quote] 恩对于空的做个为空的判断
郑先锋 2017-08-15
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
CREATE    FUNCTION [dbo].scd_dysh
    (
      @wlbh VARCHAR(50) ,
      @ysmc VARCHAR(50) ,
      @gg VARCHAR(50)
    )
RETURNS VARCHAR(8000)
AS
    BEGIN
        DECLARE @str VARCHAR(8000)
        SET @str = ''
        SELECT  @str = @str + ',' + RTRIM(yssh) + ':' +  RTRIM(zsl) +  RTRIM(dw)  ---类型转换
        FROM    wlck_sh
        WHERE   RTRIM(wlbh) = @wlbh
                AND RTRIM(gg) = @gg
                AND RTRIM(ysmc) = @ysmc
        RETURN STUFF(@str, 1, 1, '')
    END
最好确定一下是那个字段造成的这个问题……
这样好像行,我看了下,里面的参数有些是空的,比如那个gg,其他两个都不为空的情况下,就他为空
  • 打赏
  • 举报
回复
不用自定义函数 像上面的方式 查询报错吗?
二月十六 版主 2017-08-15
  • 打赏
  • 举报
回复
CREATE    FUNCTION [dbo].scd_dysh
    (
      @wlbh VARCHAR(50) ,
      @ysmc VARCHAR(50) ,
      @gg VARCHAR(50)
    )
RETURNS VARCHAR(8000)
AS
    BEGIN
        DECLARE @str VARCHAR(8000)
        SET @str = ''
        SELECT  @str = @str + ',' + RTRIM(yssh) + ':' +  RTRIM(zsl) +  RTRIM(dw)  ---类型转换
        FROM    wlck_sh
        WHERE   RTRIM(wlbh) = @wlbh
                AND RTRIM(gg) = @gg
                AND RTRIM(ysmc) = @ysmc
        RETURN STUFF(@str, 1, 1, '')
    END
最好确定一下是那个字段造成的这个问题……
郑先锋 2017-08-15
  • 打赏
  • 举报
回复
引用 1 楼 zengertao 的回复:
LZ先确定下wlck_sh表里用到的条件字段和查询字段是否有非字符型,有的话转换下
有两个数字型,其他都是varchar类型,但是数字型和上面函数那三个字段并没有什么关联
繁花尽流年 2017-08-15
  • 打赏
  • 举报
回复
LZ先确定下wlck_sh表里用到的条件字段和查询字段是否有非字符型,有的话转换下

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧