2011-07-07 3 views
0

j'ai besoin d'insérer une valeur datetime dans datetime colonne dans SQL Server 2005conversion datetime SQL Server problème

Je passe la variable DateTime de la page .aspx

qui doit être inséré dans la colonne.

Exemple:

Table(date datetime) 

@sql = 'insert into Table (date) values('[email protected]+')' 
exec(@sql) 

obtenir la conversion un message a échoué.

Une idée de comment faire cela.

Très urgent.

Merci.

+0

L'insertion de dates sous forme de chaîne dépend presque toujours de votre langue/paramètres régionaux. À quoi ressemble votre chaîne '@ datetime'? Si possible, utilisez le format ISO-8601: 'YYYYMMDD' qui fonctionne toujours, quels que soient les paramètres de format de date. –

+0

Pouvez-vous montrer votre asp.net qui appelle le SQL? –

Répondre

1

Vous devez chaîne délimiteurs - T-SQL est ce double-up guillemets simples.

SET @sql = 'insert into Table (date) values('''[email protected]+''')' 
exec(@sql) 

Cependant, il peut encore échouer, selon le format de la chaîne. Quelle que soit la raison pour laquelle vous créez une chaîne SQL, sujette à l'injection SQL, au lieu de simplement dire:

INSERT Table(date) SELECT @datetime; 

?

+0

Thnaks.J'ai fait la chaîne comme ci-dessous au serveur sql déclarer @datetime datetime set @ datetime = '07/01/2011 ' déclarer @sql varchar (500) set @ sql =' insérer dans tbl_Quality_VS_Audits (auditdate) valeurs ('' '+ convert (varchar, @ datetime, 101) +' '') ' –

+0

Je ne comprends toujours pas. Pourquoi avez-vous besoin de créer une chaîne @sql? Pourquoi ne lancez-vous pas simplement INSERT tbl_Quality_VS_Audits (auditdate) SELECT @datetime; '? –

+0

Ce n'est pas la seule chaîne que j'ai besoin d'insérer J'ai quelques paramètres supplémentaires Je viens de donner un scénario simple –

1

Ajouter des guillemets simples échappés autour de la valeur datetime. Normalement, ils sont transmis en tant que chaînes.

Voir si cela fonctionne:

@sql = 'insert into Table (date) values('''[email protected]+''')' 
exec(@sql) 
0

Assurez-vous que votre procédure de requête/stockées attendent de recevoir le paramètre comme une variable datetime (non varchar(20), ou autre chose comme ça), et assurez-vous que votre code ASP.Net passe la valeur en tant que valeur datetime aussi. Fondamentalement, pour un meilleur traitement de datetime, convertissez-les le plus tôt possible des chaînes en datetime en les acceptant en entrée (par exemple les convertir dans un événement approprié dans votre code derrière ASP.NET), gardez-les comme des dates à chaque passage les depuis/vers la base de données, et les renvoyer comme des chaînes aussi tard que possible lors de leur sortie (par exemple dans le code de vue pour asp.net mvc, ou lors de l'assignation à la propriété Text d'un contrôle ASP.Net)

0

faire ce petit changement à votre déclaration sql

@sql = "insert into Table (date) values ('"+ @datetime + "')" 
+1

Si @sql est défini du côté T-SQL, les guillemets doubles ne fonctionneront pas (Msg 207). –

0

Outre les autres suggestions avec délimiteurs et pa La date est un mot-clé réservé, utilisez [Date] à la place.

+0

Tout comme Table. :-) Je suppose que ce sont simplement des noms d'espaces réservés qui ne représentent pas vraiment le schéma sous-jacent. –

+0

Bon point ....: D – kd7

0
 
Declare @datetime datetime 
Set @datetime=GetDate() 

Declare @sql nvarchar(1000) 
Declare @param nvarchar(1000) 
Set @param='@datetime datetime' 

SET @sql = 'insert into Table (date) values(@datetime)' 

exec sp_executesql @sql,@param,@datetime 

vous devez apprendre l'injection SQL pour les requêtes dynamiques.

+0

Avez-vous une bonne référence d'où je peux apprendre it.Thanks. –

+0

http://www.sommarskog.se/dynamic_sql.html –