2014-02-12 3 views
0

Как использовать имя таблицы в качестве параметра в хранимой процедуре?Использование имени таблицы в качестве параметра в SQL Server?

Я делаю это так, но я получаю сообщение об ошибке

ALTER PROCEDURE [dbo].[usp_TablesReporting_GetTableData] 
    @tableName as VARCHAR(100) 
AS 
BEGIN 
    SELECT * FROM @tablename 
END 

Ошибка:

Must declare the table variable "@tableName"

ответ

1

Это не представляется возможным в этом формате. Вам нужно встроить переменную в динамический SQL и выполнить ее.

DECLARE @TABLENAME NVARCHAR(100), @SQL NVARCHAR(4000) 
SET @TABLENAME = 'myTable' 
SET @SQL = 'SELECT * FROM ' + @TABLENAME 
EXEC SP_EXECUTESQL @SQL 
1

Вы можете сделать что-то, как показано ниже:

ALTER PROCEDURE [dbo].[usp_TablesReporting_GetTableData] 

    @tableName AS VARCHAR(100)= NULL -- NULL default value 
AS 
DECLARE @query AS NVARCHAR(max)= 'SELECT * FROM ' + @tablename 

-- Validate the @tablename parameter. 
IF @tablename IS NULL 
BEGIN 
    PRINT 'ERROR: You must specify the table name.' 
    RETURN 
END 

exec sp_executesql @query 

RETURN 
GO 

Здесь, я только что создали и выполняется динамический запрос.

Для достижения другого способа использования режима SqlCMD вы можете получить ссылку от here.

Смежные вопросы