Tôi muốn sử dụng CLR, một cái gì đó như thế này (điều này có lợi thế khi làm việc trong các hoạt động dựa trên SET trong khi các lựa chọn thay thế sql động (tức là câu trả lời Abduls) sẽ không):
CHỈNH SỬA: Mã nguồn cho dll CLR (Visual Studio 2008) được đăng tại đây: http:/ /www.heavencore.co.uk/filehub/uploaded/EvalFunction.zip
Nếu bạn muốn tự biên dịch assembly, đây là mã:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Runtime.InteropServices
Partial Public Class UserDefinedFunctions
<Microsoft.SqlServer.Server.SqlFunction()> _
Public Shared Function EVAL(ByVal InputExpression As SqlString) As SqlDecimal
Return Evaluate(InputExpression)
End Function
Private Shared Function Evaluate(ByVal expression As SqlString) As SqlDecimal
Dim expressionStr As String = expression.ToString()
Dim loDataTable = New DataTable()
Dim loDataColumn = New DataColumn("Eval", GetType(Double), expressionStr)
loDataTable.Columns.Add(loDataColumn)
loDataTable.Rows.Add(0)
Return ParseDecimal(loDataTable.Rows(0)("Eval").ToString(), 0)
End Function
Public Shared Function ParseDecimal(ByVal InputStr As String, Optional ByVal ReturnIfFail As Decimal = 0) As Decimal
Dim ParseOutput As Decimal = 0
If Decimal.TryParse(InputStr, ParseOutput) = False Then
Return ReturnIfFail
Else
Return ParseOutput
End If
End Function
End Class
sau khi cài đặt và ràng buộc, bạn có thể thực hiện việc này sau đó:
SELECT Faktor, dbo.Eval(Faktor) as Result FROM Artikel
Chỉnh sửa:OK, tôi vừa thử nghiệm điều này và nó hoạt động tốt trong các hoạt động dựa trên thiết lập, v.v., cài đặt như sau:
-- Enable the CLR to run user-defined functions
EXEC sp_configure
'clr enabled' ,
'1'
GO
RECONFIGURE
GO
-- Set the appropriate database security permission
ALTER DATABASE [TargetDatabase] SET TRUSTWORTHY ON
GO
-- Import the assembly
CREATE ASSEMBLY EvalFunction
FROM 'C:\bin\EvalFunction.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO
-- Create the Eval function for easy use
CREATE FUNCTION dbo.Eval
(
@Expression NVARCHAR(255)
)
RETURNS DECIMAL(18, 2)
AS EXTERNAL NAME
EvalFunction.[EvalFunction.UserDefinedFunctions].EVAL
GO