One of the problems is how you get CLR (production) commands to the server. For example, our company has several clients that do not give us access to their SQL servers, but rather as a remote connection via SSMS. Thus, there is no local path from which you can deploy your asset DLL. The solution is to either load the binary into the temp table as a binary blob, or as a 0x -hex line.
Then what happens when you update the / storedproc function? You cannot update some assembly depending on another assembly (I cannot remember if it is only in case the function signature is changed.). I think we always drop all sp / func / assys before loading a new version of any assembly.
Build / help integration is idiotic. When you add a reference to sqlclr, you must have this DLL deployed to SQLS. VS will copy this dll from SQLS to the "obj / sqlclr" directory for this project and use it there. When you then create this project using the TFS build system, you must have this DLL for the build to succeed. (There are workarounds related to the common SQLS server, but ..).
When SQLS deploys production DLLs, VS will not be able to deploy new DLLs. The solution is to reset the production DLLs.
Getting a debugger to work with SQLCLR is a bitch. We most often face the fact that we do not have a domain username (DOMAIN \ username) in the sqladmin group (or somesuch). There is very little information that VS / SQLS tells you what is wrong and why it did not hit the breakpoint.
Then even when you write C #, you end up writing SQL in hard-coded strings. I don't know if some helpers exist to avoid this bullshit, for sqlclr there is no nhibernate / sqlalchemy. This is mainly in SP, which should handle many lines / etc. These functions are less affected.
It also means that if you use nhibernate or something similar in your BL layer, you probably won't be able to reuse it in the sqlclr layer, and you will duplicate classes. Creating objects from SqlReader is very, very, very dislike in 2009. What MS thinks is outside of me, incredible shit.
In general, I think SQLCLR is better than T-SQL, but in some situations it ends up just coding T-SQL SP, because it’s less of a concern.