none
存储过程中用 IN 产生的错误 RRS feed

  • 问题

  • 存储过程内容:

    USE [立得微电子有限公司]
    GO
    /****** 对象:  StoredProcedure [dbo].[采购_采购订单_采购订单录入_选择货品_插入临时表]    脚本日期: 11/12/2012 19:43:35 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[采购_采购订单_采购订单录入_选择货品_插入临时表]
    @货品编号 nvarchar(max)
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    
      insert into 选择货品_临时表  select * from 库存查询 where 货品编号 IN (@货品编号)
    END

    如果只有一个参数的话,这个存储过程会被执行。


    • 已编辑 彭123 2012年11月12日 12:09
    2012年11月12日 12:09

答案

全部回复

  • 如果有两个以上的值,存储过程不会被执行。

    2012年11月12日 12:11
  • 结果还是只有一条记录

    请问错在哪里了?

    • 已编辑 彭123 2012年11月12日 12:13
    2012年11月12日 12:12
  • 改成这样(具体原因研究一下 IN 的语法说明)

    insert into 选择货品_临时表 

    exec(' select * from 库存查询 where 货品编号 IN (' + @货品编号 + ')')

    2012年11月12日 13:06
  • 改成这样(具体原因研究一下 IN 的语法说明)

    insert into 选择货品_临时表 

    exec(' select * from 库存查询 where 货品编号 IN (' + @货品编号 + ')')

    你好,好像产生了错误。

    2012年11月12日 13:28
  • 这个问题之前在论坛也有人问过

    sqlserver中想用in判断范围,但只能输入一个字符串参数,如何拆字符串然后动态拼in()里面的内容呢?

    只能用charindex来代替in了

    DROP TABLE #t
    --> 测试数据:#t
    CREATE TABLE #t
        (
          [id] INT ,
          货品编号 NVARCHAR(20) ,
          库存查询 VARCHAR(10)
        )
    INSERT  #t
            SELECT  1 ,
                    'B1' ,
                    '库存有'
            UNION ALL
            SELECT  2 ,
                    'B3' ,
                    '库存无'
            UNION ALL
            SELECT  3 ,
                    'B2' ,
                    '库存无'
            UNION ALL
            SELECT  4 ,
                    'B2' ,
                    '库存无'
            UNION ALL
            SELECT  5 ,
                    'B4' ,
                    '库存有'
            UNION ALL
            SELECT  6 ,
                    'B1' ,
                    '库存无'
    
    SELECT * FROM #t
    
    
    BEGIN
    DECLARE @货品编号 NVARCHAR(MAX)
    SET @货品编号 = 'B1,B2'
      insert into [#t]  select * from [#t] where CHARINDEX(',' + 货品编号 + ',', ',' + @货品编号 + ',') > 0
    END
    SELECT * FROM [#t]


    给我写信: QQ我:点击这里给我发消息

    2012年11月12日 13:56
  • 结果:


    给我写信: QQ我:点击这里给我发消息

    2012年11月12日 13:57
  • 根据我的sql语句LZ可以自行修改

    给我写信: QQ我:点击这里给我发消息

    2012年11月12日 13:58
  • 不好意思,这两天在把数据库升级,一直都没有实验。

    ALTER PROCEDURE [dbo].[采购_采购订单_采购订单录入_选择货品_插入临时表]
    @货品编号 nvarchar(max)
    AS
    BEGIN
     -- SET NOCOUNT ON added to prevent extra result sets from
     -- interfering with SELECT statements.
     SET NOCOUNT ON;
    insert into 选择货品_临时表 select * from 库存查询 where CHARINDEX(',' + 货品编号 + ',', ',' + @货品编号 + ',') > 0

     

    --  insert into 选择货品_临时表  select * from 库存查询 where 货品编号 IN (@货品编号)
    END

    2012年11月14日 8:17
  • 能帮到LZ就好

    给我写信: QQ我:点击这里给我发消息

    2012年11月14日 8:23