【问题标题】:How to execute stored procedure by select in instead of =如何通过选择而不是=来执行存储过程
【发布时间】:2017-07-07 05:49:27
【问题描述】:

vb.net和mssql存储过程如何通过select in而不是=来执行存储过程

Dim sSQL As String
Dim objConn As SqlConnection
Dim objcmd As SqlCommand
Dim da As SqlDataAdapter
Dim ds = New DataSet()

sSQL = "getinvoice"
objConn = utility.getconnect
objcmd = New SqlCommand(sSQL, objConn)
objcmd.CommandType = CommandType.StoredProcedure
objcmd.Parameters.Add("@invoiceid", SqlDbType.VarChar)
objcmd.Parameters.Item("@invoiceid").Value = "1,5,13,18"    '<-- problem
da = New SqlDataAdapter(objcmd)
da.Fill(ds)

ALTER PROCEDURE [dbo].[getinvoices]
@invoiceid varchar(50)
AS
BEGIN
select * from invoice where invoiceid in @invoiceid     '<-- problem
END

【问题讨论】:

  • @invoiceid 作为表类型传递,然后加入它。

标签: sql-server vb.net stored-procedures


【解决方案1】:

我认为您需要使用动态查询。将程序更改为

ALTER PROCEDURE [dbo].[getinvoices]
    @invoiceid varchar(50)
    AS
    BEGIN
    declare @sql nvarchar(4000)
    set @sql =' select * from invoice where invoiceid in  ( '+ @invoiceid     +')' 
    EXEC (@sql)
    END

或者使用拆分函数将值拆分为表变量(那里有很多拆分函数,快速搜索会抛出一个)。

 ALTER PROCEDURE [dbo].[getinvoices] @invoiceid VARCHAR(50)
AS 
    BEGIN
        SELECT  *
        FROM    invoice
        WHERE   invoiceid IN ( SELECT   *
                               FROM     dbo.splitstring(@invoiceid) )

    END

Check here for Split string function

【讨论】:

猜你喜欢
  • 2012-11-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 2017-06-21
  • 2013-03-12
  • 2011-12-14
相关资源
最近更新 更多