通过.net程序在SQL2005中创建表

时间:2009-04-03 06:46:00

标签: c# .net sql-server-2005

我需要在C#.net程序中即时创建表。任务是将excel文件导出到SQL数据库。如果将列名和表名作为参数传递,如何编写用于创建表的存储过程?我试着写下以下SP。

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

执行时如果我输入

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

创建的列为@ Param1,@ Param2,@ Param3,@ Param4而不是CountryId ...等。

3 个答案:

答案 0 :(得分:1)

你的身体应该是


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


虽然,当您从.net调用它时,您也可以在.net中构建一个字符串并将其作为内联SQL执行...

例如:



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



然后将其作为SQL执行。

答案 1 :(得分:0)

您可以将sp_executesql系统存储过程与您必须在程序中构建的自定义字符串一起使用。

答案 2 :(得分:0)

您可以执行以下操作:

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