2015-08-24 5 views
0

J'ai une variable appelée @prmclientcode qui est nvarchar. L'entrée de cette variable peut être un code client unique ou plusieurs codes client séparés par une virgule. Par exemple Je compare cette variable à une colonne de code client dans les tables. Le type de données de cette colonne est numérique (6,0). J'ai essayé de convertir le type de données variables comme ci-dessousConversion de nvarchar en numérique

SNCA_CLIENT_CODE IN ('''+convert(numeric(6,0),@prmclientcode+''')) (The query is inside a dynamic sql). 

Mais quand j'essaie d'exécuter ce que j'obtiens l'erreur

erreur de dépassement arithmétique conversion numérique à nvarchar type de données.

Quelqu'un peut-il s'il vous plaît aidez-moi ici!

Merci!

+0

FAITES L'ESSAI: Declare var nvarchar (500) SET var = '1,2,3' exec (N'select * à partir de yortable où colonne dans ('+ @var +') –

Répondre

-1

L'utilisation peut utiliser une fonction de table ou une requête SQL dynamique, les deux options fonctionneront.

Laissez-moi savoir si vous avez besoin de plus d'aide

0

Vous devez convertir la colonne numérique (6,0) type de données nvarchar. Vous pouvez utiliser ci-dessous scrip pour le convertir en nvarchar, avant le traitement:

SNCA_CLIENT_CODE IN ('''+convert(cast(numeric(6,0) as nvarchar(max)),@prmclientcode+''')) 
0

S'il vous plaît essayer avec l'extrait de code ci-dessous.

DECLARE @ProductTotals TABLE 
(
    ProductID int 
) 

INSERT INTO @ProductTotals VALUES(1) 
INSERT INTO @ProductTotals VALUES(11) 
INSERT INTO @ProductTotals VALUES(3) 

DECLARE @prmclientcode VARCHAR(MAX)='1' 


SELECT * FROM @ProductTotals 

SELECT * FROM @ProductTotals WHERE CHARINDEX(',' + CAST(ProductID AS VARCHAR(MAX)) + ',' , ',' + ISNULL(@prmclientcode,ProductID) + ',') > 0 

Faites-moi savoir si une préoccupation.

0

utilisez le code suivant afin de séparer votre variable:

DECLARE 
    @T VARCHAR(100) = '1,2,3,23,342', 
    @I int = 1 

;WITH x(I, num) AS (
    SELECT 1, CHARINDEX(',',@T,@I) 

    UNION ALL 

    SELECT num+1,CHARINDEX(',',@T,num+1) 
    FROM x 
    WHERE num+1<LEN(@T) 
     AND num<>0 
) 

SELECT SUBSTRING(@T,I,CASE WHEN num=0 THEN LEN(@T)+1 ELSE num END -I) 
FROM x