Nazwa tabeli jako parametr funkcji

0

Witam,

mam problem z napisaniem funkcji która jako jeden ze swoich parametrów przyjmuje nazwę funkcji. Baza danych to SQL Server 2008. Kod jaki mam:

ALTER FUNCTION GetLastIdFromTable(@tableName CHAR(50), @columnName CHAR(50))
RETURNS INT
BEGIN
	DECLARE @id INT;
	SET @id = (SELECT TOP 1 @columnName FROM @tableName ORDER BY IdOsoba DESC);
	if(@id IS NULL)
		SET @id = 1;
	RETURN(@id);
END;

Kod jednak się nie kompiluje. Otrzymuje błąd:
Msg 1087, Level 16, State 1, Procedure GetLastIdFromTable, Line 5
Must declare the table variable "@tableName".

czyli nazwę tabeli jakoś inaczej należy przekazać.

Z góry dziękuje za odpowiedź.

0

Ciekawie to wygląda, chociaż nie za bardzo wiem jak tego użyć. Funkcja EXEC przyjmuje jako parametr string komendy sql, ale w jaki sposób przypisać to coś do zmiennej tak jak w moim przykładzie?

Taki zabieg nic nie daje:

ALTER FUNCTION [dbo].[GetLastIdFromTable](@tableName CHAR(50), @columnName CHAR(50))
RETURNS INT
BEGIN
	DECLARE @id INT;
	Exec('SELECT @id=(SELECT IsNull(MAX(' + @columnName + '),0)+1  FROM' + @tableName + ')');
	RETURN(@id);
END;
0

przecież masz tam przykład

CREATE PROCEDURE general_select1 @tblname sysname,
                                 @key     varchar(10) AS
DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT col1, col2, col3 ' +
              ' FROM dbo.' + quotename(@tblname) +
              ' WHERE keycol = @key'
EXEC sp_executesql @sql, N'@key varchar(10)', @key
CREATE PROCEDURE general_select2 @tblname nvarchar(127),
                                 @key     varchar(10) AS
EXEC('SELECT col1, col2, col3
      FROM ' + @tblname + '
      WHERE keycol = ''' + @key + '''')

1 użytkowników online, w tym zalogowanych: 0, gości: 1