0

我试图找出这样做的最佳方法....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)??
4

2 回答 2

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 演示

于 2013-07-19T14:33:30.623 回答
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
于 2013-07-19T14:09:06.030 回答