繁体   English   中英

执行存储为字符串的SQL算法(存储过程?c#?)

[英]Execute SQL arithmetic stored as string (stored procedure? c#?)

我正在试图弄清楚这样做的最好方法.... 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)??

我将根据与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

这样的东西可以让你使用表中的字符串并计算它。 由于它是动态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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM