Создание таблицы в SQL2005 через программу .net - PullRequest
1 голос
/ 03 апреля 2009

Мне нужно создать таблицу на лету в программе 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 ]

1 голос
/ 03 апреля 2009

Тело вашего спрока должно быть


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.

0 голосов
/ 03 апреля 2009

Вы можете сделать что-то вроде:

execute 'Create Table [dbo].Temp, ' +[@Param2]+' [DateTime], '+[@Param3]+' VarChar, '+[@Param4]+' VarChar);';
0 голосов
/ 03 апреля 2009

Вы можете использовать системную хранимую процедуру sp_executesql с пользовательской строкой, которую необходимо встроить в программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...