2017-10-10 124 views
0

我想通过用户定义的表类型将int数组传递给存储过程,然后将其插入到表中。通过WCF服务将int列表传递到存储过程

这里就是我试图做的:

  1. 创建类型:

    CREATE TYPE [dbo].[GarantiesList] AS TABLE ([code_garantie] [nvarchar](max) NULL) 
    
  2. 获取&插入到存储过程:

    ALTER PROCEDURE [dbo].[PS_EditerNouveauContrat_MRH] 
        @CODE_GARANTIES GarantiesList READONLY 
    AS 
    BEGIN 
        SET NOCOUNT ON; 
    
        INSERT INTO dbo.MVT_GARANTIES (CODE_GARANTIE) 
         SELECT c.code_garantie 
         FROM @CODE_GARANTIES c; 
    

但这失败。我得到了错误:

没有映射从对象类型系统Collections.Generic.List`1存在[[System.Int32,mscorlib程序,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089]]对已知的托管提供商本机类型

有没有人知道如何解决这个问题?

+0

的https://stackoverflow.com/q/5595353/3925232 –

回答

0
-- your Insert Statement is Not Proper try this 
    ALTER PROCEDURE [dbo].[PS_EditerNouveauContrat_MRH] 
     @CODE_GARANTIES NVARCHAR(MAX) 
    AS 
    BEGIN 
     SET NOCOUNT ON; 
     DECLARE @Sql_string NVARCHAR(4000) 
      SET @Sql_string ='INSERT INTO dbo.MVT_GARANTIES (CODE_GARANTIE) 
         SELECT code_garantie 
         FROM '[email protected]_GARANTIES+'' 
      PRINT @Sql_string 
      EXEC (@Sql_string) 

    END 
+0

可能重复这个我试过,现在插入查询的CODE_GARANTIES不 承认,我有这样的错误:标量变量CODE_GARANTIES必须声明。 – KhadBr

+0

现在我有这个错误:无法将参数值从List'1转换为IEnumerable'1。这可能是由于我从我的WCF服务传递的sqlParameter?这是我所做的: SqlParameter CODE_GARANTIES_Param = new SqlParameter(“@ CODE_GARANTIES”,CODE_GARANTIES); CODE_GARANTIES_Param.SqlDbType = SqlDbType.Structured; command.Parameters.Add(CODE_GARANTIES_Param); – KhadBr

+0

@KhadBr exec PS_EditerNouveauContrat_MRH parameter_Name在sql server中,并检查你所面对的错误 –