Czy można utworzyć procedurę składowaną, która używa parametru w FROM
klauzula?
Na przykład:
CREATE PROCEDURE [dbo].[GetMaxId]
@id varchar(50)
@table varchar(50)
AS
BEGIN
SELECT MAX(@id)
FROM @table
END
Odpowiedzi:
0 dla odpowiedzi № 1Nie można przekazywać identyfikatorów jako parametrów do zapytania (ani nazw tabel, ani nazw kolumn). Rozwiązaniem jest użycie dynamicznego SQL. Twoja składnia sugeruje SQL Server, więc wyglądałoby to tak:
CREATE PROCEDURE [dbo].[GetMaxId] (
@id varchar(50)
@table varchar(50)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = N"SELECT MAX(@id) FROM @table";
SET @sql = REPLACE(REPLACE(@sql, "@id", QUOTENAME(@id)), "@table", QUOTENAME(@table));
EXEC sp_executesql @sql;
END; -- GetMaxId