我正在试图弄清楚这样做的最好方法.... SQL SERVER存储过程?也在考虑用c#做这件事,但不管怎么说,我都处于停滞状态。
基本上我所拥有的是零件表和带有数量的列。此qty列可以是固定数字,但也可能取决于其他参数。 (长度,宽度,大小等......)。这本来是一个非常基本的项目,我用一些if语句作弊,但是越来越多的零件有计算数量。我希望能够在选择某个部分时执行存储为字符串的函数。
然后根据所需的部件,创建一个包含零件及其相应数字量的表。
我正在阅读sp_executesql,EXEC,但它们仍然没有意义(没有找到类似的例子)
表:
PART QTY
==========
X 'CASE WHEN @FinWidth >=124 THEN ROUND(1.5 + (@FinHeight-@FinWidth)/2.2,0) ELSE 10 END'
Y '2'
查询:
DECLARE @sqlCommand nvarchar(1000)
DECLARE @qty decimal(18,3)
DECLARE @finHeight decimal(18,3)
DECLARE @finWidth decimal(18,3)
DECLARE @part varchar(80)
SET @finHeight = 120
SET @finWidth = 100
sp_executesql....something??
EXEC(something)??
答案 0 :(得分:1)
我会根据与misc字段相关的业务逻辑创建一个返回数量的函数。示例函数将是
create dbo.fn_GetQuantity(@Qty int, @width decimal(18, 3), @Height decimal(18,3))
returns int
as
begin
-- TODO Apply all business logic related to @width & @height here and calculate new @Qty
return @Qty
end
然后在proc中我会用所需的参数调用这个新函数。
create proc dbo.sGetParts()
as
begin
select Part, dbo.fn_GetQuantity(Qty, finWidth, finWidth)
from parts
end
答案 1 :(得分:1)
这样的东西可以让你使用表中的字符串并计算它。由于它是动态SQL,你不能将它用作函数,所以我不确定它有多么有用......你可以尝试使用存储过程:
DECLARE @sqlCommand nvarchar(MAX)
DECLARE @finHeight decimal(18,3)
DECLARE @finWidth decimal(18,3)
DECLARE @part varchar(80)
SET @part = 'X'
SET @finHeight = 124
SET @finWidth = 400
SELECT @sqlCommand= 'SELECT ' + QTY FROM dbo.Table1 WHERE PART = @part
SET @sqlCommand = REPLACE(@sqlCommand, '@finHeight', @finHeight)
SET @sqlCommand = REPLACE(@sqlCommand, '@finWidth', @finWidth)
EXEC (@sqlCommand)
<强> SQLFiddle DEMO 强>