求助:
   问题:表类型跨库 报错“操作数据类型冲突 不兼容”
   来源:两个数据库A 和 B
在数据库A中定义了用户自定义表类型 Type1, 并定义存储过程:ALTER PROCEDURE [dbo].[Sp_AddOrder]
@OrderTable Type1 READONLY
ASBEGIN
SET NOCOUNT ON;
End
在数据库B中调用存储过程Sp_AddOrder 的时候应该怎么传入 “@OrderTable Type1 READONLY”。
数据库B中没办法 A.dbo.Type1 这样使用类型....表类型引用

解决方案 »

  1.   

    你定义了一个表类型
    那么调用的时候也必须是这个类型的,不能使用其它结构一样的表调用方法
    declare @t Type1
    insert into @t values(............)
    exec [dbo].[Sp_AddOrder] @t比如你有一个表 tb 结构和你定义的表类型Type1 一模一样
    你是不能使用exec [dbo].[Sp_AddOrder] tb 的方法
    只能用
    declare @t Type1
    insert into @t select * from tb
    exec [dbo].[Sp_AddOrder] @t关键类型不能被夸库引用。所以你还需要在b里面在定义一次Type1 
      

  2.   

    自定义表类型比较没用的东西
    程序调用sp传一个datatable是比较方便。这可能是它唯一的优点吧
      

  3.   


    我在B中定义了类型 Type1 之后去调用A中的存储过程:
    B中的存储过程:USE B
    Go
    CREATE PROCEDURE Sp_a
    -- Add the parameters for the stored procedure here
    @t Type1 READONLY
    AS
    BEGIN
    SET NOCOUNT ON;
    PRINT 'Sp_a'
    END
    GOA中调用:USE A
    Go
    DECLARE @t Type1
    EXEC IESDB.dbo.Sp_a @t
    操作数类型冲突: Type1 与 Type1 不兼容