Quelle est la longueur maximale d'une chaîne de caractère en paramètre à une procédure Stockée?
J'ai une chaîne de caractères de longueur 1,44,000 qui doit être passé en paramètre à une procédure stockée qui est une requête select sur une table.
Lorsque l'un donne c'est dans une requête (en c# ) sa fonctionne bien. Mais quand je le passe en paramètre à une procédure stockée sa ne fonctionne pas.
Voici ma procédure stockée où j'ai déclaré ce paramètre de type NVARCHAR(MAX)
------------------------------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE PROCEDURE [dbo].[ReadItemData](@ItemNames NVARCHAR(MAX),@TimeStamp as DATETIME)
AS
select * from ItemData
where ItemName in (@ItemNames) AND TimeStamp=@TimeStamp
---------------------------------------------------------------------
Ici le paramètre @ItemNames est une chaîne concatinated avec des noms différents tels que
La "Élément1", De "Item2", De "Item3'....etc.
Si quelqu'un peut dire ce qui s'est passé ici?
Merci & en ce qui Concerne
Padma
La longueur maximale d'une chaîne de caractère en paramètre à une procédure stockée dépend probablement sur la base de données. Êtes-vous à l'aide de SQL Server? Quelle version?
OriginalL'auteur padmavathi | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
De la porte de la base de données syntaxe qu'il ressemble à Sql Server, ce sont les tailles maximum de choses dans Sql Server.
Est probablement le limiteur.
Bien:
(c'est à dire de 2 147 483 647) suggère que Sql Server manipuler, mais pour ado.net.
Je ne pense pas que le limiteur de Sql Server, dans ce cas - mais ADO.NET. Je me souviens (à l'époque) quand j'ai été en utilisant ADO/VBScript il y a une limite d'environ 8,040 octets pour un jeu d'enregistrements - je vais voir si je peux trouver une référence, mais il pourrait bien y avoir une limite cumulative pour l'entrée ou la sortie des paramètres de ADO.NET
OK, donc juste pour être clair, il y a environ 1000 octets par caractère
Est-ce une blague qui allaient au-dessus de ma tête? J'étais sous l'impression qu'un personnage est n'importe où de 1 à 4 octets (selon le jeu de caractères/OS/langue/whatever...).
OriginalL'auteur amelvin
Je réalise que c'est une vieille question, mais le problème que je vois n'est pas l'une des limites, mais la syntaxe. Le problème est que la procédure stockée ne permet pas de traiter le paramètre comme une chaîne de caractères à insérer dans le SÉLECTIONNER du texte, mais il est littéralement à la recherche de la présence de la 1M+ chaîne dans votre domaine. Il ya un couple de façons de traiter ce.
Tout d'abord, vous pouvez générer le SQL de façon dynamique dans une variable, puis exécutez-le comme ceci:
Cependant, cela va échouer, parce que @ItemNames a incorporé des citations en elle, provoquant la résultante SQL invalide. Vous pourriez être en mesure de changer le @ItemNames avec:
mais je n'ai pas testé cette. L'idée ici est que vous écrivez échappé des simples guillemets (") dans la chaîne de texte à envoyer un seul guillemet simple (') pour le processeur de requêtes. La fonction REMPLACER ci-dessus est à la recherche à l'intérieur du texte de guillemets simples, et de les remplacer par deux guillemets simples.
Une solution plus robuste serait de créer une Scission de la fonction table, puis modifier votre clause avec quelque chose comme:
Je suis en supposant que vous êtes en prenant soin de l'embedded devis dans la fonction Split. Je ne recommande pas juste de retirer les guillemets avec un REMPLACENT, depuis le devis peut être protéger des virgules à l'intérieur de la chaîne de valeur.
OriginalL'auteur Kevin
Maximum que vous pouvez passer de 8000 caractères dans
VARCHAR(MAX)
propriété et 4000 caractères dansNVARCAHR(MAX)
Si vous souhaitez passer plus de alors que alors vous devez utiliser l'Utilisateur de Définir le Type de Table en tant que paramètre.
Étape 1: la Nécessité de créer l'Utilisateur de Définir le Type de Table.
Etape 2: l'Utilisateur de la udtt_ItemNames en magasin de Procédure
Alors maintenant, vous avez besoin de passer à Table pendant l'exécution de la procédure stockée.
OriginalL'auteur Shiraj Momin