2009-06-24 6 views
1

Je suis en train de créer instruction SQL dans TSQL qui ressemble à ceci:Insertion de valeurs dans Dynamic Sql dans une procédure stockée - Où vont les ticks?

INSERT INTO UsersTable (UserName) VALUES (@UserName)

C'est facile jusqu'à ce que vous essayez de le faire de façon dynamique en T -sql et @UserName est un varchar

plus il ressemble à ceci:

SELECT @SQLInsert = 'INSERT INTO UsersTable (UserName) ' + 
        'VALUES (' + @UserName + ')' 

Sauf bien sûr cela ne fonctionne pas. Combien de tics ai-je besoin pour créer des tiques dans une corde ???? Me rend fou!

Répondre

4

Je pense que le problème est que vous ne citez pas correctement la chaîne @UserName. La meilleure façon de procéder (et de manière sûre) consiste à utiliser une requête paramétrée à l'aide de sp_executesql. Voici comment cela serait fait en utilisant sp_executesql (non testé). J'espère que ça aide.

DECLARE @SQLInsert NVARCHAR(500) 
DECLARE @paramDef NVARCHAR(500) 

SET @SQLInsert = 'INSERT INTO UsersTable (UserName) VALUES (@InsUserName)' 

SET @paramDef = '@InsUserName NVARCHAR(50)' 

EXECUTE sp_executesql @SQLInsert, @paramDef, 
         @InsUserName = @UserName; 
1

Les guillemets simples dans les chaînes sont représentés par deux guillemets simples consécutifs.

Voir Constants (Transact-SQL).

0

Je suis curieux de savoir pourquoi vous placez le '+' entre la première partie et les valeurs. C'est inutile, mais à part ça, ça va avec la réponse de Justin.

Questions connexes