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

执行存储为字符串的SQL算术(存储过程?c#?),c#,sql,sql-server,stored-procedures,dynamic-sql,C#,Sql,Sql Server,Stored Procedures,Dynamic Sql,我正在试图找出最好的方法…SQL SERVER存储过程?我也在考虑用c#做这件事,但不管怎样,我都有点停滞不前 基本上我有一个零件表和一个带有数量的列。此数量列可以是固定数字,但也可能取决于其他参数。(长度、宽度、尺寸等)。这本来是一个非常基本的项目,我用一些if语句作弊,但是越来越多的部件有计算数量。我希望在选择某个部分时能够执行存储为字符串的函数 因此,根据所需的零件,将创建一个包含零件及其相应数字量的表格 我正在阅读sp_executesql,EXEC,但它们仍然没有意义(还没有找到类似的

我正在试图找出最好的方法…SQL SERVER存储过程?我也在考虑用c#做这件事,但不管怎样,我都有点停滞不前

基本上我有一个零件表和一个带有数量的列。此数量列可以是固定数字,但也可能取决于其他参数。(长度、宽度、尺寸等)。这本来是一个非常基本的项目,我用一些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)??

我将创建一个函数,根据与杂项字段相关的业务逻辑返回数量。示例函数是

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)

我看不出您需要动态SQl的原因,但是由于您构建的SQl语句有语法错误(no from子句),因此它永远不会运行。但是,为了真正帮助您,我们需要查看说明问题和示例结果的示例数据。考虑到需要使用/不使用参数执行的表的每个记录中都有不同的函数,我认为动态是唯一的方法。我愿意接受任何其他建议。(那个select语句只是表输出的一个示例)我没有任何输出,因为很明显这不会像LOL那样工作。您是否将公式存储在qty字段中?真正地我个人不想搞砸这件事,我会重新设计你的桌子,让数量永远是一个数字。从长远来看,这种模式永远不会很好地工作,当您获得更多的记录时,要获得好的数据将变得更加困难和困难。这是一个非常严重的问题,数据库需要重构才能获得更多的记录。在有输入参数之前,数量是一个未定义的数字。我正在存储代码以生成每个部分的数量。嗯,好吧,多个函数似乎是个好主意,我只是不知道如何获取为数量存储的字符串并执行它,然后返回一个小数。只有一个函数,不需要多个函数。你是说零件表中的数量实际上将数量的表达式作为字符串,你想计算它?是的,这是一个零件配置程序,其中某些零件根据问题的答案进行选择,我认为这是编程的最简单方法。以前,当我只有几个计算量时,我根据partnumber做了一个If,然后在那里有了必要的函数。(这很混乱,而且不可扩展)我不建议采用在列中存储表达式的方式,这样做会很难管理。还有其他建议吗?说到这件事,我还是个傻瓜。