0

Is it possible to create a stored procedure that uses a parameter in the FROM clause?

For example:

CREATE PROCEDURE [dbo].[GetMaxId]
@id varchar(50)
@table varchar(50)
AS
BEGIN
SELECT MAX(@id)
FROM @table
END
jarlh
  • 40,041
  • 8
  • 39
  • 58
Skylake
  • 11
  • 1

1 Answers1

0

You cannot pass identifiers as parameters into a query (neither table names nor column names). The solution is to use dynamic SQL. Your syntax suggests SQL Server, so this would look like:

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
Gordon Linoff
  • 1,198,228
  • 53
  • 572
  • 709