SQL Server存储过程附加参数格式

时间:2013-12-14 13:34:30

标签: sql-server stored-procedures formatting

我有一个存储过程。我想附加参数以获取特定表格中的所有数据(例如tblJanuary2014)。但格式化(可能)不正确?

ALTER PROCEDURE GetReportAsOf
(   
    @Month varchar(15),
    @Year varchar(15)
)
AS
    BEGIN
        SELECT * FROM tbl@Month@Year
    RETURN
    END

在执行期间,它说:

  

无效的对象名称't​​bl @ Month @ Year'

2 个答案:

答案 0 :(得分:3)

你应该在这上面创建动态的SQL。

ALTER PROCEDURE GetReportAsOf
(   
    @Month varchar(15),
    @Year varchar(15)
)
AS
    BEGIN
        DECLARE @SQLQuery AS NVARCHAR(500)
        SET @SQLQuery = 'SELECT * FROM tbl' + @Month + @Year
        EXECUTE(@SQLQuery)
    RETURN
    END

答案 1 :(得分:1)

为了避免sql注入,我会使用int参数

@y smallint, @m tinyint

declare @sqlstatement nvarchar(max);

set @sqlstatement = N'select ... from dbo.something' + convert(nvarchar(2), @m) + convert(nvarchar(4), @y);

exec(@sqlstatement);