私は以下のストアドプロシージャを持っています。私が抱えている問題は、「条件」パラメータです。それはthis-SQL - Where節の動的条件
@Conditions =「AND hcc_108 = 1、...」など
のように私はthis-
ような何かをしようとしている渡されたので、基本的にはそれぞれの条件は、独自の列でありますALTER PROC [dbo].[GetPatientPanelList]
(
@CareProviderId int=null,
@Patient nvarchar(60)=null,
@Conditions varchar=null,
@LocationId int=null
)
AS
if @Conditions is null
SELECT *
FROM vw_patient_attributes t1
INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2
ON t1.PatientID = t2.emr_id
WHERE
(t1.PreferredServiceLocationID = @LocationId OR @LocationId IS NULL)
AND (t1.CareProviderID = @CareProviderId OR @CareProviderId IS NULL)
AND (t1.FullName like '%' + @Patient + '%' OR @Patient IS NULL)
else
SELECT *
FROM vw_patient_attributes t1
INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2
ON t1.PatientID = t2.emr_id
WHERE
(t1.PreferredServiceLocationID = @LocationId OR @LocationId IS NULL)
AND (t1.CareProviderID = @CareProviderId OR @CareProviderId IS NULL)
AND (t1.FullName like '%' + @Patient + '%' OR @Patient IS NULL)
+ @Conditions
は、私はちょうどパラメータをオフに基づいて投入するために、最後のAND条件を必要としています。 "+"は構文エラーですが、これを実装する方法についてはわかりません。
ありがとうございます!
更新
私は動的SQLを試してみましたが、それは "正常に完了したコマンド(複数可))"
はここに私の現在のコードであると言って続けています。別のウィンドウでこれを書いて、最初にクエリを機能させるようにしました。
DECLARE @where nvarchar(50) = ' and hcc_18 = 1'
,@sql nvarchar(MAX) ,
@CareProviderId int=null,
@Patient nvarchar(60)=null,
@LocationId int=null
set @sql = 'select *
FROM vw_patient_attributes t1
INNER JOIN STG_OSHODS_DW.osh_rpt.dim_member_care_measures t2
ON t1.PatientID = t2.emr_id
WHERE t1.PreferredServiceLocationID = IsNull('+ convert(varchar,@LocationId) +',t1.PreferredServiceLocationID)
AND (t1.CareProviderID = isnull(' + convert(varchar,@CareProviderId)+ ', t1.CareProviderID)
AND (t1.FullName like %' + @Patient + '% OR ' + @Patient + ' IS NULL)' + @where
exec(@sql)
[キックする悪い習慣:(長さ)のない宣言 'varchar' - アーロン・ベルトラン](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09 /bad-habits-to-kick-declaring-varchar-without-length.aspx) - すべての 'varchar'または' nvarchar'変数/パラメータの長さを指定してください。 - あなたの '@Constitions varchar'は長さ' 1'にデフォルト設定されています。 http://rextester.com/SDHW82771 – SqlZim
読みやすく読みやすくなる構造体: 't1.PreferredServiceLocationID = isnull(@LocationId、t1.PreferredServiceLocationID)' –
動的SQLが必要になる – scsimon