我需要在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 ...等。
答案 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);';