2009-03-24 8 views

Répondre

3

cmsjr a un point sur ne pas avoir besoin d'exec pour cela. Mais en supposant que vous postez une version simplifiée du problème et exec est une exigence:

Il n'y a pas de colonne nommée "valeur" car il n'y a pas de table. Si vous voulez juste pour imprimer value, vous devez envelopper entre guillemets il ressemble à une chaîne de caractères dans l'appel à exec:

exec(' select ''' + @test + ''' ') 
+0

Méfiez-vous de l'injection SQL lors de l'écriture de code comme celui-ci. –

+0

Bon point. D'où viendront les données de votre variable @test? Même s'il s'agit d'une source relativement fiable, vous pourriez créer une vulnérabilité de second ordre. –

+0

J'ai besoin de créer un tsql dynamique pour sélectionner entre 5 sources différentes dans la même instance sql. Les variables proviendront des pré-calculs de date effectués dans le même sp qui exécute la commande exec avant de l'exécuter. – Joel

3

Vous n'avez pas besoin d'utiliser Exec dans ce contexte Si vous faites une affectation directe, vous pouvez utiliser

Set @test = 'VALUE' 

et pour afficher la valeur il suffit de sélectionner sans attribuer une valeur

Select @test 
+0

Je veux l'utiliser dans une commande exec. – Joel

8

L'alternative propre est d'utiliser sp_executesql() et sa capacité à traiter paramétrés déclarations:

DECLARE @test VARCHAR(20) 
DECLARE @stmt NVARCHAR(100) 
DECLARE @parm NVARCHAR(100) 

SET @stmt = N'SELECT @val'  /* statement definition */ 
SET @parm = N'@val VARCHAR(20)' /* parameters definition */ 
SET @test = 'VALUE' 

EXECUTE sp_executesql @stmt, @parm, @val = @test 

Rendement:

(no column name) 
VALUE 
+0

À quoi ressemblerait l'instruction from si je voulais sélectionner dynamiquement la base de données en utilisant une autre variable? – Joel

+0

Votre question ne semblait pas aller dans cette direction pour moi. Cela ressemblait à un problème de portée variable ou à un malentendu de sémantique/syntaxe de votre côté. J'ai couvert la première option, Joel Coehoorn a couvert le dernier. – Tomalak

+0

La documentation en anglais est ici .. http://msdn.microsoft.com/en-us/library/ms188001.aspx – Molomby

Questions connexes