我被要求创建一个存储过程,它将接受许多选项(目前有8个布尔值),以指示包含了哪些列。
我可以为每种情况创建一个单独的SELECT语句,但8平方(8平方)= 64条单独的select语句。再添加一个参数,我现在有9平方公里= 81条单独的select语句。很快就加起来了。
我使用Microsoft的(SSMS),因为我不是一个强大的SQL作者,它告诉我什么时候做错了什么。
如果构建动态SQL语句,就会失去SSMS的代码检查能力。
Q:有使用参数值指定SELECT语句列的方法吗?
下面是我尝试使用SQL拼凑起来的一个非常粗糙的示例:
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;发布于 2016-02-09 16:56:30
你已经找到了两种选择,以及每种方法的缺点。
您可以使用:
没有别的办法了。
如果您担心失去SSMS的代码检查能力,则可以在开发期间使用PRINT语句查看动态查询的外观,并将该查询复制并粘贴到新的SSMS查询中,以查看SSMS可能有哪些建议。
https://stackoverflow.com/questions/35297645
复制相似问题