我们有一组表,它们的后缀是星期几(Table_Mon,Table_Tue等)。我试图提出一种设计,其中应用程序可以在当前的任何一天从这些列中提取有限的数据集。我当时正在查看在视图中使用动态SQL,但这不是一种选择。什么是正确的解决方案,以便应用程序无需提供星期几就可以查询表?
答案 0 :(得分:2)
这是一个设计不良的数据库架构。理想情况下,应该只有一个带有列Week_Day
的表,并且您只需添加适当的WHERE
子句就可以查询该表。
无论如何,您将需要使用动态sql,但应使用存储过程代替视图。像...
CREATE PROCEDURE dbo.Get_Data
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX)
,@TableName SYSNAME;
SET @TableName = N'TABLE_' + LEFT(DATENAME(WEEKDAY, GETDATE()) , 3);
SET @Sql = N' SELECT * FROM ' + QUOTENAME(@TableName)
Exec sp_executesql @Sql
END