J'ai une table contenant de nombreuses lignes de commandes SQL qui composent une seule instruction SQL (à laquelle je suis reconnaissant pour cette réponse, étape 5 ici )
J'ai suivi l'exemple de cette réponse et j'ai maintenant une table de SQL - chaque ligne est une ligne de SQL qui construit une requête. Je peux copier et coller le contenu de ce tableau dans une nouvelle fenêtre de requête et obtenir les résultats, mais en raison de mon manque de connaissances SQL, je ne suis pas sûr de la copie du contenu de la table dans une variable de chaîne que je peux ensuite exécuter . P>
EDIT: L'instruction SQL dans ma table comprend 1 ligne par chaque ligne de l'instruction, c'est-à-dire P> cette instruction si elle est copiée dans un varchar ( Max) dépasse la limite maximale. P> J'attends vos réponses. En attendant, je vais essayer moi-même. p> merci p> p>
3 Réponses :
Vous pouvez essayer quelque chose comme ceci CLORD de concaténate de plusieurs lignes P> DECLARE @Table TABLE(
ID INT,
Val VARCHAR(50)
)
INSERT INTO @Table (ID,Val) SELECT 1, 'SELECT *'
INSERT INTO @Table (ID,Val) SELECT 2, 'FROM YourTable'
INSERT INTO @Table (ID,Val) SELECT 3, 'WHERE 1 = 1'
DECLARE @SqlString VARCHAR(MAX)
--Concat
SELECT DISTINCT
@SqlString =
(
SELECT tIn.Val + ' '
FROM @Table tIn
ORDER BY ID
FOR XML PATH('')
)
FROM @Table t
PRINT @SqlString
Le tableau que je convertit en une chaîne est plus grand que Varchar (Max)? Pouvez-vous recommander un type de données approprié. La table contient environ 400 rangées. Merci, c'est presque ce que je cherche.
Regardez ici Teratrax.com/articles/varchar_max.html. Il indique ces types de données peuvent contenir la même quantité de blobs de données peuvent contenir (2 Go) i>
Intéressant, ma requête SQL ne passe définitivement pas 2 Go !! J'utilise Varcharate (Max) selon votre Declare ci-dessus.
Vous cherchez à concaténer les chaînes SQL de la table avant de l'exécuter ou d'exécuter toutes les entrées une à la fois? Qu'est-ce qui semble être le problème?
La table contient environ 300 lignes contenant une ligne d'une seule requête SQL (j'ai édité ma question pour le refléter maintenant, espérons que cela le rend plus clair). Utilisation d'une combinaison de votre réponse et de la réponse de concernéfieunbridgewells ci-dessus, je tente de "EXEC @SQLString", mais je reçois une erreur afin que j'ai examiné la chaîne en utilisant "Imprimer @sqlstring" et je ne peux voir que les 16 premières lignes de la table qui C'est pourquoi je reçois l'erreur. C'est pourquoi je pensais que le @sqlstring a été maxé! Évidemment pas
Eh bien, vous voulez concaténer la chaîne avant de l'exécuter.
J'ai trouvé le problème. J'ai utilisé Exec @sqlstring au lieu d'Exec (@sqlstring). Cela fait toute la différence.
Je vous remercie de votre aide car cela me dirige dans la bonne direction. Je ne sais pas pourquoi cela ferait la différence cependant.
Si vous souhaitez exécuter une chaîne de SQL, utilisez Exec A > () ou sp_executesql p>
Vous pouvez utiliser des regroupements pour concaténer le contenu d'une colonne dans une chaîne, par exemple
select name from sys.objects select name from sys.indexes
C'est Goodm, merci. Le seul problème que j'ai, c'est que ma table contient plus de déclarations que Varchar (Max) peut gérer. Quel est un autre type de données approprié que je puisse utiliser. J'utilise SQL Server 2008 si cela aide.