这就是我要做的事情:
select Id, Operator form MathOperator
结果:
ID | Operator
-----------
1 | '+'
2 | '-'
*并以某种方式执行此操作:
declare @operator char(2)=
(select MathOperatorSymbol from MathOperator Where MathOperatorId = 1)
select 1 @operator 2 -- should be as: select 1+2
有可能吗?
答案 0 :(得分:2)
使用动态SQL
exec('select 1'+ @operator + ' 2')
答案 1 :(得分:1)
您可以使用动态SQL执行此操作:
<=
当然,>=
和remote_tmp1
在此上下文中不起作用,因此会产生错误。
答案 2 :(得分:1)
是的,它是可靠的。您可以使用动态查询
示例:
BEGIN
DECLARE @STRQUERY NVARCHAR(MAX)
DECLARE @OPERATOR CHAR(2)
SET @OPERATOR = '+';
SET @STRQUERY = 'SELECT 1' + @OPERATOR + '2';
EXEC (@STRQUERY)
END
答案 3 :(得分:0)
如果您只支持简单计算(Num1 Operator Num2
),则可以使用case expression选择正确的运算符。
SELECT
CASE Operator
WHEN '+' THEN Num1 + Num2
WHEN '-' THEN Num1 - Num2
ELSE NULL
END AS Result
FROM
MyTable
;
如果MyTable包含:
Num1 Operator Num2
1 + 1
1 - 1
查询将返回:
Result
2
0
确保使用适当的数据类型存储值。如果不是,您可能会发现查询返回意外结果。
如果您需要支持更高级的选项,请考虑使用动态SQL。
答案 4 :(得分:0)
一种方法是使用XML(.query)和动态SQL:
DECLARE @sql nvarchar(max),
@val1 float = 1,
@val2 float = 2,
@oper int =1
;WITH MathOperator AS (
SELECT *
FROM (VALUES
(1, '+' ),
(2, '-'),
(3, '*'),
(4, 'div'), --instead of /
(5, '>'),
(6, '<')
) as t(ID, Operator)
)
SELECT @sql = N'
DECLARE @x xml = '''';
SELECT @x.query('''+CAST(@val1 as nvarchar(max))+' '+Operator+' '+CAST(@val2 as nvarchar(max))+''');'
FROM MathOperator
WHERE id = @oper
EXEC sp_executesql @sql
如果您将1
和2
与不同的@oper
一起传递,您将获得:
oper result
+ 3
- -1
* 2
/ 0.5
> true
< false