2017-07-07 79 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