1.976 messaggi dal 27 luglio 2005
Contributi
salve,
grazie per aver indicato il problema e la soluzione...
in effetti, SQL Server effettua le chiamate su linked server tramite il protocollo OLE DB, ed in SQL Server questo protocollo determina i metadati impostando SET FMTONLY ON in modo da ottenere tutte le informazioni necessarie per la creazione del result set, ma questo comporta che il comando viene "eseguito" (anche se non effettivamente eseguito, ma valutato) nella sua interezza, passando per tutti i nodi condizionali a prescindere dal loro effettivo valore..

se brutalmente provi ad eseguire con SSMS e risultato in "formato testo"
SET NOCOUNT ON;
GO
SELECT 'inizio';
IF (1 = 1) BEGIN
PRINT 'questo e'' vero';
SELECT 'questo e'' vero';
END;
ELSE IF (1 = 2) BEGIN
PRINT 'questo e'' falso';
SELECT 'questo e'' falso';
END;
GO
SET FMTONLY ON;
SELECT 'inizio';
IF (1 = 1) BEGIN
PRINT 'questo e'' vero';
SELECT 'questo e'' vero';
END;
ELSE IF (1 = 2) BEGIN
PRINT 'questo e'' falso';
SELECT 'questo e'' falso';
END;
GO
SET FMTONLY OFF;

potrai constatare che, anche se non viene in effetti eseguito il comando nel caso di FMTONLY ON, tutte e 2 le branches del codice vengono "valutate" ed in effetti avrai 2 righe di "-------" oltre all'iniziale relativo al comando SELECT 'inizio';

Erland Sommarskog ha gia' in passato affrontato l'argomento in
http://www.sommarskog.se/share_data.html#OPENQUERY

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.