salve Claudio,
cosi', ovviamente, NON si puo' fare...
il risultato puo' essere fatto, ma e' molto pesante ed articolato, in quanto devi prendere la "stringa" del valore, farne il parsing, e convertire l'operazione nella sua corrispettiva matematica...
se quindi
SELECT colValore FROM tabella WHERE ...
restituisce
'8*2'
devi caricare in qualche modo
DECLARE @expression varchar(100) = '';
SELECT @expression = colValore FROM tabella WHERE ...
e da qui separare gli operatori dai "numeri" e convertire il tutto nel risultato...
oppure, ma devi essere certo di quello che c'e' in colValore, cioe' che non ci siano "problemi" nella valorizzazione della stessa, e quindi definisci un SQL dinamico completo dell'operazione che va eseguita recuperando l'espressione dalla colonna e poi esegui TUTTO quello che ti serve tramite sp_executesql...
trvialmente, una "schifezza" simile a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
Id int,
ColValore varchar(10)
);
INSERT INTO dbo.t
VALUES (1 , '8*2'), (2, '5+7');
DECLARE @id int = 1;
SELECT *
FROM dbo.t t
WHERE t.Id = @id;
DECLARE @expression varchar(8000) = ''
DECLARE @cmd nvarchar(MAX) = ''
SELECT @expression = t.ColValore
FROM dbo.t t
WHERE t.Id = @id;
SELECT @cmd =
'SELECT t.Id, ' + @expression + ' AS [Expression]
FROM dbo.t t
WHERE t.Id = ' + CONVERT(varchar, @id);
PRINT 'Codice generato';
SELECT @cmd;
PRINT 'Esecuzione dinamica';
EXECUTE sp_executesql @cmd;
GO
DROP TABLE dbo.t;
--<---------
Id ColValore
----------- ----------
1 8*2
Codice generato
---------------------------------------
SELECT t.Id, 8*2 AS [Expression]
FROM dbo.t t
WHERE t.Id = 1
Esecuzione dinamica
Id Expression
----------- -----------
1 16
il tutto e' in qualche modo "arricchibile" passando meglio i parametri alla procedura sp_executesql, e vedrai meglio la sinossi della stessa presso https://docs.microsoft.com/it-it/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017
salutoni
--
Andrea