SQL Server: plusieurs insertions dans la table temporaire tout en créant une valeur pour chaque insertion différente

Pardonnez mon code, j'apprends encore.

Ce que je veux faire est de prendre plusieurs instructions select et les insert dans une seule table temporaire. Pour chaque énoncé de sélection, je voudrais une sorte d'identification pour savoir quelle instruction select provient des données.

J'ai une idée grossière ci-dessous pour utiliser l'énoncé de cas ci-dessous.

Erreur:

Msg 8152, niveau 16, état 14, ligne 14
Chaîne ou des données binarys seront tronquées.

Code:

if object_id('tempdb..#PP') is not null drop table #PP SELECT #Pr.*, Case When TranID = TranID then 'BK Problem' Else 'Error' End as 'Test' INTO #PP FROM #Pr WHERE TypeID = 't' --CCA Test INSERT INTO #PP SELECT #Pr.*, Case When TranID = TranID then 'CCA Problem' Else 'Error' End as 'Test' FROM #Pr WHERE TypeID = 'r' 

J'apprécie toute aide qui me pointe dans la bonne direction.

Merci

    Si vous utilisez SELECT.. INTO.. comme ceci, la longueur de la colonne est déterminée par la longueur maximale de chaque colonne sur le premier insert.

    Donc, en insérant d'abord 'Problème BK', crée la colonne Test avec une longueur de 'Problème BK', ou 10.
    (Faites ceci pour voir: PRINT LEN('BK Problem') )

    Ensuite, l'insertion de 'Problème CCA' dans Test échoue, car la longueur est de 11 et est trop longue.

    Je ne comprends pas le besoin de votre déclaration de cas non plus, essayez ceci:

     SELECT #Pr.*, CAST('BK Problem' as VARCHAR(11)) Test INTO #PP FROM #Pr WHERE TypeID = 't' --CCA Test INSERT INTO #PP SELECT #Pr.*, 'CCA Problem' FROM #Pr WHERE TypeID = 'r' 

    Le problème est l'expression de votre cas. Lorsque vous créez la table en utilisant select, la colonne "Test" est créée comme varchar (10). Mais dans votre instruction d'insertion, la valeur est de 11 caractères. Vous pouvez éviter ceci en convertissant / convertissant sur votre expression de casse originale pour rendre la colonne assez large.

     SELECT #Pr.*, convert(varchar(20), Case When TranID = TranID then 'BK Problem' Else 'Error' End) as 'Test' INTO #PP FROM #Pr WHERE TypeID = 't'