输入药品名称转换成ID没有问题,但是药品名称如果不对,就会出现错误。建议在上面的程序中,直接按照药品名称转换成ID,输入到数据库的时候直接用id。

解决方案 »

  1.   

    越简单越好,我要在vc程序里面用,应为直接输入的是名称,插入到数据库想在对应的表里转换成ID,可是要怎么写呢
      

  2.   

    直接输id很麻烦的,不直观,药品名称如果不对的话,那就是数据输入的问题了,到时候再说,不知道直接插入该怎么写,每次插入式都能转换,在sql表里建个触发器应该可以吧
      

  3.   

    直接输id很麻烦的,不直观,药品名称如果不对的话,那就是数据输入的问题了,到时候再说,不知道直接插入该怎么写,每次插入式都能转换,在sql表里建个触发器应该可以吧
    你在vc里面弄个combobox啊,显示药名,值为id,然后直接传输id到数据库啊,有什么问题么?
      

  4.   


    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'
      

  5.   

    直接输id很麻烦的,不直观,药品名称如果不对的话,那就是数据输入的问题了,到时候再说,不知道直接插入该怎么写,每次插入式都能转换,在sql表里建个触发器应该可以吧
    你在vc里面弄个combobox啊,显示药名,值为id,然后直接传输id到数据库啊,有什么问题么?
    我想利用SQL语句直接插入,不想再vc里面在查找对应信息再插入了
      

  6.   


    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'
    要是在一个存储过程里面,你上面那句应该放在哪里呢,我试了好几次,都会提示有错误
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedId int,
    @MedNamer varchar(50),
    @Mquality float

    AS 
    beginInsert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @MedId,
    @MedNamer,
    @Mquality
    )end
      

  7.   


    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'
    要是在一个存储过程里面,你上面那句应该放在哪里呢,我试了好几次,都会提示有错误
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedId int,
    @MedNamer varchar(50),
    @Mquality float

    AS 
    beginInsert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @MedId,
    @MedNamer,
    @Mquality
    )end

    看你的存储过程,这些你都已参数的形式传进去了,那你还要拿干嘛。
      

  8.   


    看你的存储过程,这些你都已参数的形式传进去了,那你还要拿干嘛。
    比葫芦画瓢画的,我参考书上的,自己在声明的时候加上了你给写的那些代码,不过不行,是不是应该在VALUES后面添加那些代码 @medid int,
    @MedName varchar(50),
    @Mquality float

    as
    select @medid=medid from medicine where medname=@MedName
      

  9.   

    比葫芦画瓢画的,我参考书上的,自己在声明的时候加上了你给写的那些代码,不过不行,是不是应该在VALUES后面添加那些代码 @medid int,
    @MedName varchar(50),
    @Mquality float

    as
    select @medid=medid from medicine where medname=@MedName

    放到begin后面 medid不用传进来了,传名字就好
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @medId,
    @MedNamer,
    @Mquality
    )end
      

  10.   

    直接输id很麻烦的,不直观,药品名称如果不对的话,那就是数据输入的问题了,到时候再说,不知道直接插入该怎么写,每次插入式都能转换,在sql表里建个触发器应该可以吧插入数据的时候,写个子查询就可以了,比如:insert into PreMed(MedId,其他列)
    select (select MedId from Medicine where MedName='你输入的药品名称'),其他列的值
      

  11.   



    放到begin后面 medid不用传进来了,传名字就好
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @medId,
    @MedNamer,
    @Mquality
    )end正解,离自己想要的还差一些
      

  12.   

    放到begin后面 medid不用传进来了,传名字就好
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @medId,
    @MedNamer,
    @Mquality
    )end正解,离自己想要的还差一些你要的是这样吗:set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    (select medid from medicine where medname='黄连'),
    @MedNamer,
    @Mquality
    )end
      

  13.   

    放到begin后面 medid不用传进来了,传名字就好
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @medId,
    @MedNamer,
    @Mquality
    )end正解,离自己想要的还差一些试试这个:set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    (select medid from medicine where medname='黄连'),
    @MedNamer,
    @Mquality
    )end
      

  14.   

    insert into PreMed(MedId,其他列)
    select (select MedId from Medicine where MedName='你输入的药品名称'),其他列的值嗯,子查询不太了解,不过可以试试
      

  15.   

    放到begin后面 medid不用传进来了,传名字就好
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @medId,
    @MedNamer,
    @Mquality
    )end正解,离自己想要的还差一些试试这个:set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    (select medid from medicine where medname='黄连'),
    @MedNamer,
    @Mquality )end谢谢小当家,上面那个其实已经可以插入了,我在vc程序里也调试好可以用了,我是想要个触发器形式的(我也不知道行不行),当在一个表中插入一个数据时,会自动补全其它列信息的
      

  16.   

    放到begin后面 medid不用传进来了,传名字就好
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=medid from medicine where medname='黄连'Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    @medId,
    @MedNamer,
    @Mquality
    )end正解,离自己想要的还差一些试试这个:set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER Procedure [dbo].[PreMed_insert] 
    @PreId varchar(50),
    @SerNumber varchar(50),
    @MedNamer varchar(50),
    @Mquality float

    AS 
    begin
    --你根据你输入的药名可以找到药的ID,你把ID也插进去就可以了。
    declare @medid int
    slect @medid=Insert into dbo.PreMed
    (PreId,
    SerNumber,
    MedId,
    MedName,
    Mquality)
    VALUES
      (@PreId,
    @SerNumber,
    (select medid from medicine where medname='黄连'),
    @MedNamer,
    @Mquality )end谢谢小当家,上面那个其实已经可以插入了,我在vc程序里也调试好可以用了,我是想要个触发器形式的(我也不知道行不行),当在一个表中插入一个数据时,会自动补全其它列信息的可以通过触发器来补全,通过update的方式,比如:create trigger dbo.trigger_PreMed_insert 
    on dbo.PreMed
    for insert
    as--这里是自动补全了MedId列,你还可以补全其他的列
    update PreMed
    set MedId = (select medid from Medicine where Medname =i.medname)
    from inserted i
    where i.PreId = PreMed.PreIdgo
      

  17.   

    可以通过触发器来补全,通过update的方式,比如:create trigger dbo.trigger_PreMed_insert 
    on dbo.PreMed
    for insert
    as--这里是自动补全了MedId列,你还可以补全其他的列
    update PreMed
    set MedId = (select medid from Medicine where Medname =i.medname)
    from inserted i
    where i.PreId = PreMed.PreIdgo
    嗯,试了试,在sql里面挺好使的,就是一点不明白,那个i代表什么,在这里应该是PreMed表吧
      

  18.   

    嗯,试了试,在sql里面挺好使的,就是一点不明白,那个i代表什么,在这里应该是PreMed表吧这个inserted i 其实这里的i就是个别称,也就是inserted,这个是一个在触发器中能用的表,表示了要插入的记录。
      

  19.   

    也就是,比如你insert into 一条记录。那么这个insert语句,触发了 这个触发器,然后里面的inserted这个表里,就会有这条记录,然后你可以引用这条记录进行关联,查询等