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)
4 Réponses :
Vous voudrez peut-être voter sur chez Microsoft Connect P>
voter pour ce spécifique problème sur la voix de l'utilisateur va ici . P>
É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>
Vous devez créer une fonction scindée. C'est la manière dont une fonction fractionnée peut être utilisée: p> 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 Une fois que la table des chiffres est configurée, créez cette fonction fractionnée: p> code> contenant des lignes de 1 à 10 000: 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
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: p>
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);