Ho provato ad aggiornare una procedura memorizzata che ha funzionato correttamente senza la necessità di utilizzare sp_executesql. Ora desidero avere il nome della tabella come parametro poiché ho un numero di tabelle con la stessa struttura e non voglio creare nuove stored procedure per ognuna di esse.Procedura memorizzata con nome tabella come parametro tra gli altri
Il problema che ho è che questa versione sembra richiedere tutti i parametri, mentre la precedente ha accettato un numero qualsiasi di parametri. Ad esempio, se rimuovo tutti i parametri WHERE e ho solo il parametro @TableName, funziona correttamente. Ho provato a cercare un esempio, ma non riesco a trovare nulla di simile. Tutti gli esempi di analisi del nome della tabella hanno solo quel parametro.
CREATE PROCEDURE cafgTenantNamesTEST2
@TableName sysname,
@Square nvarchar(100) = null,
@Location nvarchar(100) = null,
@Name nvarchar(100) = null,
@NormalizedName nvarchar(100) = null,
@SharedLand int = 0,
@FieldNumber int = 0,
@Description nvarchar(255) = null,
@Dwelling nvarchar(100) = null
AS
BEGIN
DECLARE @sql AS NVARCHAR(MAX)
SET @sql = 'SELECT * FROM [' + @TableName + ']' +
'WHERE ([Square] LIKE ''' + @Square + ''' OR ''' + @Square + ''' IS NULL)' +
'AND ([Location] = ''' + @Location + ''' OR ''' + @Location + ''' IS NULL)' +
...
...
--PRINT @sql
EXEC sp_executesql @sql
END
Suggerimenti per favore.
Controllare il valore di @sql e assicurarsi che possa essere eseguito. Puoi costruire una stringa sql codificando il nome della tabella e far funzionare la clausola Where? – JeffO
Prova ad aggiungere uno spazio prima di 'WHERE' e' AND' che stai concatenando senza spazi vuoti. – HABO