【发布时间】:2015-07-16 00:28:56
【问题描述】:
我正在尝试将表名传递给以下代码,但它不起作用。当我这样做时,代码将起作用:SELECT X.* INTO dbo.RiskFactors_Tobacco 但我似乎无法让它起作用:SELECT X.* INTO @RiskFactorsTable。有什么建议吗?
CREATE TYPE typeRiskFactorsTable AS TABLE
(RiskFactorICD9 VARCHAR(10))
CREATE PROCEDURE dflt.GetRiskFactors
@RiskFactorICD9 typeRiskFactorsTable READONLY
@RiskFactorsTable as VARCHAR(30)
AS
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = '2014-01-01 00:00:00'
SET @EndDate = '2015-12-31 23:59:59'
SELECT X.*
INTO @RiskFactorsTable
FROM
(SELECT c.id, ip.AdmitDateTime as DateTime, ip.ICD9Code, ip.ICD9Description, 'IP' as DS
FROM dbo.Inpat ip
INNER JOIN dbo.COHORT c ON (c.ID = ip.ID)
WHERE ip.ICD9Code IN (SELECT RiskFactorICD9 FROM @RiskFactorICD9)
AND ip.AdmitDateTime between @StartDate and @EndDate
UNION ALL
SELECT c.id, ov.VisitDateTime as DateTime, ov.ICD9Code, ov.ICD9Description, 'OP' as DS
FROM dbo.Outpat_Visit ov
INNER JOIN dbo.Outpat ovd ON (ovd.ID = ov.ID)
INNER JOIN dbo.COHORT sc ON (c.ID = ov.ID)
WHERE icd.ICD9Code IN (SELECT RiskFactorICD9 FROM @RiskFactorICD9)
AND ov.VisitDateTime between @StartDate and @EndDate
) X
ORDER BY ID, DateTime, DS
GO
/*TOBACCO*/
DECLARE @RiskFactors typeRiskFactorsTable
INSERT @RiskFactors(RiskFactorICD9)
VALUES ('305.1'), ('989.84'), ('V15.82');
EXEC dflt.GetRiskFactors @RiskFactors, @RiskFactorsTable = RiskFactors_Tobacco;
GO
【问题讨论】:
-
表名不能在 t-sql 中参数化。如果必须,唯一的方法是使用动态 sql。当心小鱼饵桌。
标签: tsql