首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按选项参数生成SQL选择列

按选项参数生成SQL选择列
EN

Stack Overflow用户
提问于 2016-02-09 16:52:20
回答 1查看 52关注 0票数 2

我被要求创建一个存储过程,它将接受许多选项(目前有8个布尔值),以指示包含了哪些列。

我可以为每种情况创建一个单独的SELECT语句,但8平方(8平方)= 64条单独的select语句。再添加一个参数,我现在有9平方公里= 81条单独的select语句。很快就加起来了。

我使用Microsoft的(SSMS),因为我不是一个强大的SQL作者,它告诉我什么时候做错了什么。

如果构建动态SQL语句,就会失去SSMS的代码检查能力。

Q:有使用参数值指定SELECT语句列的方法吗?

下面是我尝试使用SQL拼凑起来的一个非常粗糙的示例:

http://sqlfiddle.com/#!3/5ef0f/1

模式:

代码语言:javascript
复制
create table Invoice 
(
    Id int IDENTITY(1,1) NOT NULL,
    Name varchar(20) NOT NULL,
    Retail decimal(9, 4) NOT NULL,
    Quoted decimal(9, 4) NOT NULL,
    TaxCodeId int NULL
);

create table TaxCode 
(
    Id int IDENTITY(1,1) NOT NULL,
    Name varchar(20) NOT NULL,
    Rate decimal(9, 4) NOT NULL
);

存储过程:

代码语言:javascript
复制
CREATE PROCEDURE TestProcedure
    (@showPrice bit, @showTaxRate bit) 
AS BEGIN
    SET NOCOUNT ON;

    SELECT 
        Invoice.Name,
        CASE WHEN @showPrice = 1 THEN Invoice.Retail, Invoice.Quoted, 
        END
        CASE WHEN @ShowTaxRate = 1 THEN TaxCode.Rate 
        END
    FROM 
        Invoice
    LEFT JOIN 
        TaxCode on Invoice.TaxCodeId = TaxCode.Id;
END;
EN

回答 1

Stack Overflow用户

发布于 2016-02-09 16:56:30

你已经找到了两种选择,以及每种方法的缺点。

您可以使用:

  1. 动态SQL,或
  2. 决定执行哪一个选择( 64)的IF逻辑。

没有别的办法了。

如果您担心失去SSMS的代码检查能力,则可以在开发期间使用PRINT语句查看动态查询的外观,并将该查询复制并粘贴到新的SSMS查询中,以查看SSMS可能有哪些建议。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35297645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档