我有这个存储过程,我想基于变量传递即@Practice_Short_NameSQL Server存储过程动态选择表名
Create procedure [dbo].[GetCompleteCPTDetails]
@Practice_Short_Name varchar(50) is Null,
@Uploaded_Date varchar(30) is Null
as
begin
DECLARE @CPTtablename varchar(100)
DECLARE @vQuery NVARCHAR(100)
--Dynamically select Table name based on @practice_short_name
set @CPTtablename ='ACER_CLAIMS_MASTER_DETAIL_Hist_'[email protected]_Short_Name+''
SET @vQuery = 'select Practice_Short_Name,Service_Date_From,Carrier_Name,
Location_Description,Patient_Number,Patient_First_Name,
Patient_Last_Name,Voucher_Number,Procedure_Code,Service_Fees,
Service_Payments,Service_Adjustments,Acer_Status,Acer_Allowed_Amount
from '[email protected]+'
where Uploaded_Date ='[email protected]_Date+' and
Practice_Short_Name ='[email protected]_Short_Name+'
order by acer_status asc, Service_Date_From desc, Patient_First_Name asc'
EXEC @vQuery
end
GO
动态选择表名,但运行时,该PROC它就像
抛出错误“找不到存储过程”选择Practice_Short_Name,Service_Date_From,Carrier_Name, Location_Description,Patient_Numb'。“
任何人都可以解释我什么我做错了..
看看[sp_executesql](https://msdn.microsoft.com/en-us/library/ms188001.aspx)。运行比使用输入参数构建动态sql更安全 –
奇怪的数据库设计。为什么每个练习的历史表都使用短名称,而不是有一个历史表和一个练习短名称的列,因此您可以使用纯SQL来检索数据? –
如果我把所有的数据放在一张表中,那么我的应用程序运行速度很慢。我在桌上有大约1800,000多条记录。 –