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

时间:2013-07-19 13:59:06

标签: c# sql sql-server stored-procedures dynamic-sql

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

2 个答案:

答案 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