SQL CLR: Streaming table valued function results

前端 未结 3 2169
滥情空心
滥情空心 2021-02-10 15:24

My issue is very similar to this issue.

However, I\'m using SQL Server 2005 Service Pack 2 (SP2) (v9.0.3042) and the solution posted there does not work for me. I tried

3条回答
  •  一向
    一向 (楼主)
    2021-02-10 16:14

    Googling for this:

    Data access is not allowed in this context. Either the context is a function or method not marked with DataAccessKind.Read or SystemDataAccessKind.Read, is a callback to obtain data from FillRow method of a Table Valued Function, or is a UDT validation method.

    Led me to this page, but without the answer I needed.
    I eventually figured out what it was.
    In my CLR Function, I was calling another Method and passing in the values the Function had recieved.

    Sounds innocuous, but what I had done was used the same datatypes (SqlChars, SqlBoolean, SqlInt32) for the input-parameters of the Method I added.

    private static ArrayList FlatFile(SqlChars Delimeter, SqlChars TextQualifier)
    

    Apparently using these datatypes for anything other than a CLR SqlFunction or SqlProcedure can sometimes give you this type of cryptic error.

    Once I removed those datatypes on my new Method and used the C# ones (string, bool, int), the error finally went away.

    private static ArrayList FlatFile(string Delimeter, string TextQualifier)
    

    NOTE: This only errored out when I was using Impersonation to grab a file from another Domain.
    When I streamed the file over the local Domain, I didn't receive this error, which is what threw me off.

    I hope this helps you in your time of need. I blew way too many hours troubleshooting this.

提交回复
热议问题