gpt4 book ai didi

sql - 通过选项参数构建 SQL SELECT 列

转载 作者:行者123 更新时间:2023-12-02 09:28:46 24 4
gpt4 key购买 nike

我被要求创建一个存储过程,该过程将接受许多选项(目前有八个 bool 值)来指示包含哪些列。

我可以为每种情况创建一个单独的 SELECT 语句,但 8²(八个正方形)= 64 个单独的 select 语句。再添加 1 个参数,我现在有 9² = 81 个单独的 select 语句。这加起来很快。

我使用 Microsoft 的 SQL Server Management Studio (SSMS),因为我不是一个强大的 SQL 编写者,当我做错了什么时它会告诉我。

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

问:有没有办法使用参数值指定 SELECT 语句列?

这是一个非常粗略的例子,我尝试使用 SQL Fiddle 拼凑在一起:

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

架构:

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
);

存储过程:

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;

最佳答案

您已经了解了这两个选项以及每个选项的缺点。

您可以使用:

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

没有其他办法。

如果您担心失去 SSMS 的代码检查能力,您可以在开发过程中使用 PRINT 语句来查看动态查询是什么样子,然后将该查询复制并粘贴到新的 SSMS 查询中以查看 SSMS 可能有什么建议.

关于sql - 通过选项参数构建 SQL SELECT 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35297645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com