使用表名作为SQL Server中的参数?

时间:2014-02-12 04:45:47

标签: sql-server

如何将表名用作存储过程中的参数?

我这样做但是我收到了错误

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

错误:

  

必须声明表变量“@tableName”

3 个答案:

答案 0 :(得分:2)

试试这个

DECLARE @cmd AS NVARCHAR(max)
SET @cmd = N'SELECT * FROM ' + @table_name
EXEC sp_executesql @cmd

答案 1 :(得分:1)

这种格式不可能。您需要将变量嵌入到动态SQL中并执行它。

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

答案 2 :(得分: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获取参考。