Sql server 操作数类型冲突:使用TVP时nvarchar不兼容

Sql server 操作数类型冲突:使用TVP时nvarchar不兼容,sql-server,vb.net,Sql Server,Vb.net,我创建了如下表值参数: CREATE TYPE dbo.ss AS TABLE(ss1 integer); ALTER PROCEDURE [dbo].[T_TransactionSummary] @locations dbo.ss readonly as begin ............... ............. AND (Location_tbl.Locid IN (select ss1 from @locations)) 然后我编写了如下的存储过程: CREATE

我创建了如下表值参数:

CREATE TYPE dbo.ss AS TABLE(ss1 integer);
ALTER PROCEDURE [dbo].[T_TransactionSummary] 
 @locations dbo.ss readonly
as
begin
...............
.............
AND (Location_tbl.Locid IN (select ss1 from @locations))  
然后我编写了如下的存储过程:

CREATE TYPE dbo.ss AS TABLE(ss1 integer);
ALTER PROCEDURE [dbo].[T_TransactionSummary] 
 @locations dbo.ss readonly
as
begin
...............
.............
AND (Location_tbl.Locid IN (select ss1 from @locations))  
我的locid字段是整数,此locid来自我的列表框。如果我选择一个项目,1个locid将出现。如果我选择2个项目,2个locid将出现。。我有一个填充@locations参数(一个整数)的ListBox,我的ListBox值如下

cnt = LSTlocations.SelectedItems.Count
  Dim dtlist As New DataTable()
    Dim locid As Integer
    If cnt > 0 Then
        For i = 0 To cnt - 1
            dtlist.Columns.Add(locid, GetType(Integer))
            Dim locationanme As String = LSTlocations.SelectedItems(i).ToString
            locid = RecordID("Locid", "Location_tbl", "LocName", locationanme)
            dtlist.Rows.Add(locid)
        Next
End If
 Dim da As New SqlDataAdapter
        Dim ds As New DataSet
        Dim cmd23 As New SqlCommand("T_TransactionSummary", con.connect)
        cmd23.CommandType = CommandType.StoredProcedure
        Dim tvp1 As SqlParameter = cmd23.Parameters.AddWithValue("@locations", dtlist)
         tvp1.SqlDbType = SqlDbType.Structured
        da.SelectCommand = cmd23
        da.Fill(ds) 

但我遇到了一个错误:尝试传递一个具有2列的表值参数,其中相应的用户定义表类型需要1列。

如果
LocID
是整数,则表类型应为:

CREATE TYPE dbo.ss AS TABLE(ss1 INT);
--------------------------------^^^
你到底为什么在这里使用NVARCHAR(5)?由于种种原因,它没有意义


此外,还需要停止将位置集作为整数列表传递,这些整数被合并成逗号分隔的字符串。表值参数需要一个结构化集,如
DataTable

sir..in type i更改为int,code i更改为如下:cmd23.Parameters.Add(“@locations”,SqlDbType.int)。Value=String.Join(“,”,list)但获取错误:无法将参数值从字符串转换为Int32。@user2878851我甚至不知道这是什么意思。但我只涉及到你的三个问题,很明显,你忽视了很多每个人都在告诉你的事情。你总是一次又一次地尝试做同样的错误的事情,不管它被解释了多少次。你也需要在这里多吃点。