Próbowałem zaktualizować procedurę przechowywaną, która działała poprawnie bez konieczności użycia sp_executesql. Teraz chcę mieć nazwę tabeli jako parametr, ponieważ mam wiele tabel o tej samej strukturze i nie chcę tworzyć nowych procedur przechowywanych dla każdego z nich.Procedura przechowywana z nazwą tabeli jako parametrem między innymi
Problem polega na tym, że ta wersja wydaje się wymagać wszystkich parametrów, podczas gdy poprzednia akceptowała dowolną liczbę parametrów. Na przykład, jeśli usunę wszystkie parametry WHERE i po prostu ustawię parametr @TableName, to działa dobrze. Próbowałem szukać przykładu, ale nie mogę znaleźć czegoś takiego. Wszystkie przykłady parsowania nazwy tabeli mają tylko ten parametr.
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
Sugestie proszę.
Sprawdź wartość atrybutu @sql i upewnij się, że można go uruchomić. Czy możesz zbudować ciąg sql, kodując nazwę tabeli i uruchamiając klauzulę Where? – JeffO
Spróbuj dodać spację przed wyrazami "WHERE" i "AND", które łączą się bez białych znaków. – HABO