2017-07-07 99 views
-2

如何通过选择在代替=由vb.net和MSSQL存储过程执行存储过程如何通过选择中,而不是执行存储过程=

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 
+0

传递'@ invoiceid'一个表类型,那么就加入到它。 – Chuck

回答

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

+0

有没有函数dbo.splitstring是否需要我自己创建?怎么样? – fsze88hoho

+0

是的你必须..检查此链接https://stackoverflow.com/questions/10914576/t-sql-split-string –

+0

这是更糟糕的一种分离器,你可以使用@ShijuShaji。阅读:http://www.sqlservercentral.com/articles/Tally+Table/72993/ – scsimon