Хранимая процедура с именем таблицы в качестве параметра - PullRequest
4 голосов
/ 04 мая 2011

У меня есть хранимая процедура, и я хотел бы присвоить число строк в этой таблице переменной, а затем использовать эту переменную.

Я вызываю процедуру как:

EXEC TEST.dbo.myProc nameOfTable

Процедура выглядит примерно так:

CREATE PROCEDURE myProc @table_name varchar(1024) AS
BEGIN
    DECLARE  @Nval INT
    /*  SOME INSTRUCTIONS */

    SELECT   @Nval  = COUNT(*) FROM @table_name 
END 

При выполнении я получаю сообщение об ошибке:

Сообщение 156, уровень 15, состояние 1, процедура nLQ, строка 57
Неверный синтаксис рядом с ключевым словом FROM.

Как бы я назначил переменную @Nval?

Ответы [ 2 ]

15 голосов
/ 04 мая 2011

Вы не можете параметризовать имя таблицы таким образом, FROM @table_name.Единственный способ - выполнить динамический TSQL.

Перед этим прочитайте: Проклятие и благословения динамического SQL

11 голосов
/ 20 июня 2013

попробуйте

ALTER PROCEDURE [dbo].[sp_tablenametest]
@table_name varchar(50),
@PMId int,
@ValueEq int

AS
BEGIN
SET NOCOUNT ON;

DECLARE @cmd AS NVARCHAR(max)
SET @cmd = N'SELECT * FROM ' + @table_name + 
' WHERE Column1 = ''' + @PMId +  '''' +
' AND Column2= ''' + @ValueEq + ''''

EXEC sp_executesql @cmd 
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...