2009-04-03 5 views
1

J'ai besoin de créer une table à la volée dans le programme C# .net. La tâche consiste à exporter le fichier Excel vers la base de données SQL. Comment écrire une procédure de stockage pour créer une table si le nom de la colonne et le nom de la table sont passés en tant que paramètres? J'ai essayé d'écrire après SP.Création d'une table dans SQL2005 via le programme .net

ALTER PROCEDURE dbo.CreateTempTable 
@Param1 VarChar(50), 
@Param2 VarChar(50), 
@Param3 VarChar(50), 
@Param4 VarChar(50) 
AS 
if exists(select * from sys.objects where object_id = OBJECT_ID('[dbo].[Temp]') AND type='U') 
begin 
Drop Table [dbo].[Temp] 
end 

Create Table [dbo].[Temp]([@CountryID] [int], 
[@Param1] [VarChar](150), 
[@Param2] [DateTime], 
[@Param3] [VarChar](50), 
[@Param4] [VarChar](50)); 

RETURN 

Pendant l'exécution si je donne comme entrée

@Param1 - 'CountryId' 
@Param2 - 'CountryName' 
@Param3 - 'CreateDate' 
@Param4 - 'CreatedBy' 

La colonne créée comme @ Param1, @ Param2, @ Param3, @ Param4 au lieu de CountryId ... etc.

Répondre

1

Le corps de votre sproc devrait être


exec ('CREATE TABLE [dbo.Temp] (' + @param1 + ' int,' + @param2 + ' [DateTime], ' + @Param3 + ' VarChar, ' + @Param4 + ' VarChar)') 

 

Bien que, comme vous l'appelez de .net, vous pourriez tout aussi bien construire une chaîne en .net et exécuter que SQL en ligne .. .

par exemple:



string sql = string.Format("CREATE TABLE [dbo.Temp] ({0} int, {1} [DateTime], {2} VarChar, {3} VarChar)", fieldName1, fieldName2, fieldName3, fieldName4); 


 

Et puis exécutez simplement que SQL.

+0

Merci pour votre suggestion. J'ai utilisé la requête de chaîne et fonctionne bien. Je suis maintenant capable de passer n'importe quel nombre de colonnes, et peut même définir le type de données. – ihcarp

0

Vous pouvez utilisez la procédure stockée système sp_executesql avec une chaîne personnalisée que vous devez construire dans votre programme.

0

Vous pouvez faire quelque chose comme:

execute 'Create Table [dbo].Temp, ' +[@Param2]+' [DateTime], '+[@Param3]+' VarChar, '+[@Param4]+' VarChar);'; 
Questions connexes