如何在SQL Server 2012中的存储过程中动态提供表名

时间:2016-05-27 07:20:16

标签: sql sql-server sql-server-2012

我正在创建两个包含行和列的表。我创建了一个存储过程,动态获取表名并生成结果。

但是当我动态地传递表名时,它就不起作用了。

CREATE PROC spGetAll (@tableName varchar(50))
AS
BEGIN
    SELECT
        *
    FROM @tableName
END

enter image description here

2 个答案:

答案 0 :(得分:2)

只需使用动态SQL。例如:

CREATE PROC spGetAll (
    @tableName SYSNAME)
AS
BEGIN
    DECLARE @sql nvarchar(max) 

    IF EXISTS (SELECT name FROM sys.objects WHERE name = @tableName)
    SET @sql = 'SELECT * FROM test.'+ QUOTENAME(@tableName)
    EXEC(@sql) -- Or EXEC sp_executesql @sql
END

答案 1 :(得分:1)

这是一种方式。 。

IF @tableName = 't111'
    SELECT * FROM t111
ELSE
    SELECT * FROM t222