8
votes

Paramètre de valorisation de table dans la procédure stockée et l'entité Framework 4.0

J'ai une procédure stockée dans SQL Server 2008 appelée «getprices» avec un paramètre de valorisation de table appelé «Stombides».

Ceci est le type que j'ai créé pour ce TVP: P>

CREATE TYPE integer_list_tbltype AS TABLE (n int)


0 commentaires

4 Réponses :


0
votes

Vous voudrez peut-être voter sur chez Microsoft Connect

mise à jour: ms n'utilise pas de connexion pour les fonctionnalités. Ils ne l'utilisent que pour les rapports de bugs. Pour voter pour une fonctionnalité EF, vous devez aller Voix utilisateur EF site.

voter pour ce spécifique problème sur la voix de l'utilisateur va ici .


0 commentaires

1
votes

Étant donné que vous ne pouvez pas utiliser de paramètre de table, essayez de passer à une piqûre de CSV et que la procédure stockée divisait-la en rangées pour vous.

Il existe de nombreuses façons de diviser la chaîne dans SQL Server. Cet article couvre les avantages et les inconvénients de toutes les méthodes suivantes: p>

" Les tableaux et listes de SQL Server 2005 et au-delà, lorsque les paramètres de la valeur de la table ne le coupent pas "par ERLANT SOMMARSKOG P>

Vous devez créer une fonction scindée. C'est la manière dont une fonction fractionnée peut être utilisée: p> xxx pré>

Je préfère l'approche de la table de chiffres de scinder une chaîne dans TSQL , mais il existe de nombreuses façons de diviser les chaînes dans SQL Server, voir le lien précédent, ce qui explique les avantages et les inconvénients de chaque . p>

Pour que la méthode de la table des chiffres fonctionne, vous devez effectuer cette configuration de table une fois, qui créera une table code> contenant des lignes de 1 à 10 000: P > xxx pré>

Une fois que la table des chiffres est configurée, créez cette fonction fractionnée: p>

CREATE PROCEDURE YourProcedure
(
    @CSV_Param   varchar(1000)
)
AS

--just an example of what you can do
UPDATE t
    SET Col1=...
    FROM dbo.FN_ListToTable(',',@CSV_Param) dt
        INNER JOIN TBL_USERS                 t ON  CAST(dt.value AS INT)=t.id

GO


0 commentaires

1
votes

Vous pouvez utiliser la propriété ObjectContext.Connection pour Utilisez ado.net pour créer et utiliser vos paramètres valorisés de table. Cela pourrait ne pas être acceptable, mais si vous souhaitez utiliser cette superbe fonctionnalité SQL Server 2008 et la FEE, cela semble être que vous choisissez uniquement.

Vous pouvez ensuite choisir dans la mesure du contexte d'objet partiellement généré avec la méthode pour Prenez soin de toutes les trucs ado.net bas bas. Comme ceci: xxx


0 commentaires

2
votes

Je suis d'accord que le passage d'une piqûre de CSV est la meilleure solution dans ce cas. Je tiens à proposer un moyen plus simple de scinder la chaîne CSV, sans créer de tables et de fonctions, à l'aide de CTE:

declare @separator char(1);
set @separator = ',';

;with baseCte as
(select left(@ValueList, charindex(@separator, @ValueList) - 1) as Value,
substring(@ValueList, charindex(@separator, @ValueList) + 1, len(@ValueList)) 
as rest
union all
select left(rest, charindex(@separator, rest) - 1) as Value, 
substring(rest, charindex(@separator, rest) + 1, len(rest)) from baseCte
where len(rest) > 1
)
select Value from baseCte
OPTION (MAXRECURSION 0);


0 commentaires