Sql server T-SQL-使用参数作为tablename的一部分

Sql server T-SQL-使用参数作为tablename的一部分,sql-server,tsql,Sql Server,Tsql,我试图使用T-SQL(在SQL Server 2012中)存储过程传递一个参数作为表名的一部分,但遇到了一个错误 范例 CREATE PROCEDURE test_proc @year NVARCHAR(4) AS BEGIN UPDATE Tablename@yearABC ..... 如果我用参数值2017调用过程,我希望它更新tablename 2017abc 有人能解释一下如何使用存储过程(或其他T-SQL)将参数作为表名的一部分吗 谢谢你可以按照这些思

我试图使用T-SQL(在SQL Server 2012中)存储过程传递一个参数作为表名的一部分,但遇到了一个错误

范例

CREATE PROCEDURE test_proc 
     @year NVARCHAR(4)  
AS
BEGIN
    UPDATE Tablename@yearABC
    .....
如果我用参数值2017调用过程,我希望它更新
tablename 2017abc

有人能解释一下如何使用存储过程(或其他T-SQL)将参数作为表名的一部分吗


谢谢

你可以按照这些思路做些事情

DECLARE 
    @year NCHAR(4) = N'2017',
    @DeBug BIT = 1; -- 0=execute & 1=print sql

DECLARE @sql NVARCHAR(4000) = N'
UPDATE tny SET
    tny.ColumnName = ''Something''
FROM
    dbo.TableName' + @year + N' tny
WHERE 
    tny.OtherColumn = ''SomethingElse'';';

IF @DeBug = 1
BEGIN
    PRINT(@sql);    
END;
ELSE
BEGIN
    EXEC sys.sp_executesql @sql
END;

寻找动态sql,这里有很多。为什么在不同名称的表中有相同的数据?人们普遍错误地认为,将数据归档到年度表中是个好主意。只需在一个表上使用足够的索引并节省您自己的工作量这是一个强烈的指示,您应该将一个表的列
year
作为主键的第一部分,如果您确实需要将其分布在多个文件或磁盘上,请使用表分区。