Assembly CLR C# à l'intérieur de SQL Server
- Est-il possible de faire un gros projet en C# (beaucoup de fonctions), puis,
- Créer Assembly CLR pour elle, alors,
- Dans SQL Server DANS UNE procédure STOCKÉE, appeler une fonction qui est dans l'assemblée,
-
La table (qui j'aimerais passer à l'ASSEMBLAGE) est calculée dans d'autres procédures stockées...
- Si oui, Quelles seraient les étapes?
Je pense à quelque chose comme cela.
-- I have a stored proc that gets a table, let it be myStoredProcTable
--FIST ENABLE DATA ACCESS
EXEC sp_serveroption 'TheServerName', 'DATA ACCESS', TRUE
--main.sql calls yStoredProcTable.sql and the calls functionAssembly
SELECT *
INTO #tmpTable
FROM OPENQUERY(SERVERNAME, 'EXEC test.dbo.myStoredProcTable 1')
-- pass the table to assembly
-- how would i pass the table to assembly code?, Is this POSSIBLE?
EXEC functionAssembly #tmpTable
------------------------------------------edit
Suivantes @faester
réponse:
- Comment pourrais-je l'utiliser XML dans le code, j'ai suggéré d'utiliser le numberTOstring
chose, mais je suppose que XML
option est le meilleur ici...
Encore une fois, j'ai vraiment le faire, même si ce n'est pas le meilleur choix...
Étape 1: Repenser la conception de votre.
Eh bien, j'aimerais bien, mais ces mesures sont déjà fait. Je pensais que cette sorte
Votre conception est le tapis rouge dans thedailywtf.com
Vous savez... les problèmes du monde réel sont très fou...
Eh bien, j'aimerais bien, mais ces mesures sont déjà fait. Je pensais que cette sorte
I can make a bridge for all this code
Votre conception est le tapis rouge dans thedailywtf.com
Vous savez... les problèmes du monde réel sont très fou...
OriginalL'auteur cMinor | 2011-06-15
Vous devez vous connecter pour publier un commentaire.
Oui vous pouvez vous inscrire assemblées, mais c'est rarement une bonne idée en raison de problèmes de performances.
Mais si vous faites complexe des calculs numériques ou opérations similaires sur des valeurs scalaires, il peut vous donner beaucoup de souplesse. Mais le problème reste que SQL est nativement jeu orienté que le C# n'est pas le cas, il vous sera facile de courir dans les inadéquations.
Vous devriez aussi être conscient que vous ne pouvez importer que des membres statiques sur les classes statiques.
Mais un exemple
Cette classe qui, intentionnellement, ne dispose pas d'un espace de noms, car il semble impossible d'importer les classes dans un espace de noms.
Il prend un peu de SQL pour obtenir le serveur prêt et vous avez probablement besoin d'être admin.
NOUVEAU: Vous vraiment doit être convaincu que vous avez besoin de cela, c'est rarement une bonne idée! (Je l'ai utilisé une fois pour l'e-mail de validation de faire des recherches dns etc, mais c'était sur un système où toutes les logiques d'entreprise a été écrite en SQL. Et c'est mauvais!)
Quelques références utiles:
http://msdn.microsoft.com/en-us/library/ms189524.aspx
http://www.codeproject.com/KB/database/CLR_in_Sql_Server_2005.aspx
2 ints
en tant que paramètres, je pensais passer colonne par colonne, et assignt à un var, par exemple, permet de dire si j'ai 10 colonnes, faire 10 variables, puis d'attribuer à chaque var chaque colonneHow would you pass or save in a variable a table column, I mean, as you said (@a int,@b int)... How to make a vector?
Je ne suis pas sûr, mais en général il y a des correspondances entre les CLR et les types SQL, donc peut-être que vous pouvez passer dans un DataTable qui se serait traduit par une construction comme
DECLARE @t TABLE (id int not null)
. C'est de la pure deviner si. Votre procédure peut également lire à partir d'une table.Type de conversion ici: msdn.microsoft.com/en-us/library/ms131092.aspx - C'est comme si vous ne pouvez pas entrer des collections, mais comme je l'ai mentionné plus tôt, mais rien valeurs scalaires est cher dans ce contexte. Votre meilleure option pour entrer les collections sont probablement à créer SqlXml éléments de la première.
Je pensais en faire une sélection de la table d'une colonne et de prendre les numéros de chaîne
declare @List varchar(max) select @List = isnull(@List + ',', '') + cast(ColumnName as varchar) from MyTable
est-ce factible?, ensuite, dans le code C#, je voudrais restaurer la chaîne à un vecteur..., pourriez-vous s'il vous plaît poster un peu de code suivant votre XML idée....À propos de XML, je pensais juste que c'était plus simple de passer plusieurs valeurs dans un document XML que dans certains csv chaîne de style. Je n'ai pas utilisé donc je ne peut produire aucun code.
OriginalL'auteur faester
Utiliser le SQL CLR pour effectuer la fonction exacte que vous avez décrit.
OriginalL'auteur Jonathan
Il est possible. (Lire les commentaires).
OriginalL'auteur driis