我有一个存储过程。我想附加参数以获取特定表格中的所有数据(例如tblJanuary2014
)。但格式化(可能)不正确?
ALTER PROCEDURE GetReportAsOf
(
@Month varchar(15),
@Year varchar(15)
)
AS
BEGIN
SELECT * FROM tbl@Month@Year
RETURN
END
在执行期间,它说:
无效的对象名称'tbl @ Month @ Year'
答案 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);