2017-10-16 88 views
0
CASE 
    WHEN @vessel_certificate_id IS NULL 
     THEN SELECT 
       id, name as file_name, 
       SUM(DATALENGTH(data))/1048576.0 AS file_size, 
       dbo.fn_format_datetime(created_on) as file_date 
      FROM 
       vessel_cert_attachment 
      GROUP BY 
       id, name, type, created_by, created_on 
     ELSE 
      SELECT 
       id, name as file_name, 
       SUM(DATALENGTH(data))/1048576.0 AS file_size , 
       dbo.fn_format_datetime(created_on) as file_date 
      FROM 
       vessel_cert_attachment 
      WHERE 
       vessel_certificate_id = @vessel_certificate_id 
      GROUP BY 
       id, name, type, created_by, created_on 

此基础上,如果参数是不是空的,我希望它没有PARAM执行select语句,如果有PARAM传球,我希望它执行与WHERE条件SELECT语句中的SQL。if else sql语句(选择语句与参数和没有参数)?

是否可以像那样执行它?

+2

'CASE'在T-SQL是一种** **表达(如'一个+ B'),该**返回ONE,单个的原子值** - 你不能使用'CASE'来有条件地执行一个代码块或另一个代码块 - 为此,你需要'IF .... ELSE ....' –

回答

0

使用OR条件Where子句

SELECT id, 
     NAME        AS file_name, 
     Sum(Datalength(data))/1048576.0 AS file_size, 
     dbo.Fn_format_datetime(created_on) AS file_date 
FROM vessel_cert_attachment 
WHERE (vessel_certificate_id = @vessel_certificate_id 
      OR @vessel_certificate_id IS NULL) 
GROUP BY id, 
      NAME, 
      type, 
      created_by, 
      created_on 
+0

Plus阅读[T-SQL中的动态搜索条件](http: //www.sommarskog.se/dyn-search.html)Erland Sommarskog撰写的文章,了解为什么您最好将'OPTION(RECOMPILE)'添加到这种查询中。 –