首页 > 解决方案 > 使用 print @sql 调试动态 SQL?

问题描述

我无法发现我在这里做错了什么。我希望能够使用 print 命令进行调试,但我无法让它工作,请在此处指出我做错了什么

= " SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;"
+ " DECLARE @sql NVARCHAR(MAX)"
+ " SELECT @sql = COALESCE(@sql + N' UNION ', N'') + N'hr.client ,RTRIM(LTRIM(hc.facility)) AS face ,h.gode ,h.rode    ,hr.*"
+ " FROM B1' + CONVERT(NVARCHAR(MAX), RIGHT(CONCAT('00000',dbname),5)) + '.dbo.herpa h "
+ " JOIN B1' + CONVERT(NVARCHAR(MAX), RIGHT(CONCAT('00000',dbname),5)) + '.dbo.herpaderpa hr ON hr.[counter] = h.rink "
+ " JOIN B1' + CONVERT(NVARCHAR(MAX), RIGHT(CONCAT('00000',dbname),5)) + '.dbo.herpacerpa hc ON hc.[counter] = hr.cink " 
+ " WHERE 1=1  "
+ IIf(IsNothing(Parameters!StartDate.Value),"", " AND (hr.r_date > DATEADD(DAY,-1,''"
+ Parameters!StartDate.Value
+ "'')) ")
+ IIf(IsNothing(Parameters!EndDate.Value),"", " AND (hr.r_date < DATEADD(DAY,1,''"
+ Parameters!EndDate.Value
+ "'')) ")


+ " AND hr.NPI IN (''" + Join(Parameters!NPI.Value,"'',''") + "'') "
+ IIf(Array.IndexOf(Parameters!Cat.Value, "ANY") > -1, "", " AND hr.cat IN (''" + Join(Parameters!Cat.Value,"'',''") + "'') ")
+ IIf(Array.IndexOf(Parameters!Gode.Value, "ANY") > -1, "", " AND h.gode IN (''" + Join(Parameters!Gode.Value,"'',''") + "'') ")
+ IIf(Array.IndexOf(Parameters!Rode.Value, "ANY") > -1, "", " AND h.rode IN (''" + Join(Parameters!Rode.Value,"'',''") + "'') ")

+ "' "
+ " FROM (VALUES "
+ Parameters!SC.Value 
+ ") t (dbname) "
+ " exec sp_executesql @sql "

我已将整个内容包装在 @SQL 中,然后尝试打印 @sql 但是,没有返回任何内容。请让我知道我在这里做错了什么

标签: sql-serverreporting-servicesdynamic-sql

解决方案


请参阅本节:

+ " WHERE 1=1 and "
+ IIf(IsNothing(Parameters!StartDate.Value),"", " AND (hr.r_date > DATEADD(DAY,-1,''"

第一行以.结尾and

在下一行,如果值不是 Nothing,则添加以开头的部分AND

导致WHERE 1=1 and AND ...


推荐阅读