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
  • 42,561
  • 8
  • 45
  • 63
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,242,037
  • 58
  • 646
  • 786