2010-12-10 9 views
1

Je suis en train d'écrire une dynamique SQL:SQL Server/SSIS - Dynamic T-SQL, NVARCHAR (MAX) Différence

DECLARE @sql NVARCHAR(MAX) 

SET @sql = '...' 

EXEC sp_executesql @sql 

Si j'exécute ceci de SSMS, la requête s'exécute avec succès, car il est inférieur à 8000 (7787 pour être précis) caractères. Si j'exécute cela à partir de SSIS (en utilisant une connexion ADO.NET) la requête échoue car NVARCHAR(MAX) est l'équivalent de NVARCHAR(4000). Je comprends que c'est quelque chose à voir avec la compatibilité - la connexion de SSIS doit supporter plus que SQL Server.

Quelles sont mes options de contournement?

Répondre

2

Pour moi, je vais cette façon (par ordre de préférence):

  1. trouver un moyen de le faire sans utiliser SQL dynamique (un grand scénario dynamique doit être un cauchemar pour déboguer ou changement) ...

  2. Divisez certains d'entre eux en procédures stockées et appelez ceux de votre SQL dynamique.

  3. Divisez-le en plusieurs sous-requêtes plus petites.

+1

Je suis d'accord avec Paddy, n'utilisez pas SQL dynamique si vous n'en avez absolument pas besoin. Et l'option 2 a certainement du sens aussi. – grapefruitmoon

+0

Je suis complètement d'accord. Ceci est l'un de ces morceaux de code qui a frappé pendant quelques années dans le besoin désespéré d'un rajig approprié. – youwhut

+0

@youwhut - bonne chance, auquel cas :) – Paddy