2017-03-13 16 views
1

Der Code Ich verwende zu erfassen ist:Der Versuch, das Ergebnis einer Auswahlabfrage in eine Variable aber immer Syntaxfehler

DECLARE @var1 AS int; 
SET @var1=8191; 
WITH A AS (
    SELECT 0 AS ORD, @var1 AS NUMBER, CAST('' AS VARCHAR(20)) AS BITS 
    UNION ALL 
    SELECT ORD+1, NUMBER/2, CAST(BITS+CAST(NUMBER%2 AS VARCHAR(20)) AS VARCHAR(20)) 
      FROM A 
      WHERE NUMBER>0) 
SELECT RIGHT('000000000000000'+ CASE WHEN BITS='' THEN '0' ELSE REVERSE(BITS) END,16) AS BIN_VALUE 
FROM A 
WHERE NUMBER=0 

Diese den binären Wert der Zahl wird so in @ gespeichert Var1 es für 8191 würde das Ergebnis 0001111111111111 geben, möchte ich diese Nummer erfassen, damit ich sie in einer anderen Abfrage zB in @ Var2 verwenden kann. Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Funktioniert das nicht für Sie?

SELECT @var2 = RIGHT('000000000000000'+ CASE WHEN BITS='' THEN '0' ELSE REVERSE(BITS) END,16) 
FROM A 
WHERE NUMBER = 0; 
+0

Das funktioniert gut, Danke. Ich habe SET anstelle von Select verwendet und deshalb hat es nicht funktioniert –

1

Try this ... Ich habe die Declare @Var2 und in der letzten wähle ich den SELECT @Var2 = Bit hinzugefügt.

DECLARE @Var2 AS VARCHAR(50) -- or whatever data type you need 

DECLARE @var1 AS int;  
SET @var1=8191; 
WITH A AS (
SELECT 0 AS ORD, @var1 AS NUMBER, CAST('' AS VARCHAR(20)) AS BITS 
UNION ALL 
SELECT ORD+1, NUMBER/2, CAST(BITS+CAST(NUMBER%2 AS VARCHAR(20)) AS VARCHAR(20)) 
     FROM A 
     WHERE NUMBER>0) 
SELECT @Var2 = RIGHT('000000000000000'+ CASE WHEN BITS='' THEN '0' ELSE  REVERSE(BITS) END,16) AS BIN_VALUE 
FROM A 
WHERE NUMBER=0 
1

Ein anderer Weg, ohne den rekursiven CTE

DECLARE @var1 AS SMALLINT = 8191, 
     @Var2 CHAR(16); 

SELECT @Var2 = 
RIGHT('000000000000000'+ 
REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
      REPLACE(
      REPLACE(
      REPLACE(
      REPLACE(
       REPLACE(
       REPLACE(
       REPLACE(
       FORMAT(@var1,'x') 
       ,'0','0000') 
       ,'1','0001') 
       ,'2','0010') 
      ,'3','0011') 
      ,'4','0100') 
      ,'5','0101') 
      ,'6','0110') 
     ,'7','0111') 
     ,'8','1000') 
     ,'9','1001') 
     ,'a','1010') 
    ,'b','1011') 
    ,'c','1100') 
    ,'d','1101') 
    ,'e','1110') 
,'f','1111') 
,16) 

SELECT @Var2 
Verwandte Themen