Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Динамические таблицы / 15 сообщений из 15, страница 1 из 1
12.09.2014, 18:53
    #38745529
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Здравствуйте! Всем.

В приложение я устанавливаю соединение с бд через "мастера настройки источников данных".
В приложении у меня в вызывается хранимая процедура из бд, которая создаёт таблицу и к ней преставление.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE PROCEDURE NewTableShops @nameTable char(100)
AS

DECLARE @id int

INSERT INTO StoreShops (NameTable)
	VALUES (@nameTable)

SELECT @id = (SELECT MAX(IDTable) FROM StoreShops)

EXEC('CREATE TABLE TableShop' + @id + ' ' +
			'( ' +
				'IDShop int IDENTITY(1, 1) PRIMARY KEY, ' +
				'NameShop char(40) NOT NULL, ' +
				'Adress char(40) NULL, ' +
				'Telephone char(40) NULL, ' + 
				'IDTable int NOT NULL ' +
			')'
		)

EXEC('CREATE VIEW ViewShop' + @id + ' ' +
			'AS ' +
			'SELECT ' +
				'IDShop, ' +
				'RTRIM(NameShop) AS NameShop, ' +
				'RTRIM(Adress) AS Adress, ' +
				'RTRIM(Telephone) AS Telephone, ' +
				'IDTable ' +
			'FROM TableShop' + @id
		)



Суть проблемы такова: Как мне обратится к созданному процедурой представлению? Много искал в инете. но толкового не нашел (может коряво искал) и решил спросить совета. Заранее благодарен!
...
Рейтинг: 0 / 0
12.09.2014, 19:09
    #38745539
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
executesql(N'select * from ViewShop') ?
...
Рейтинг: 0 / 0
12.09.2014, 19:28
    #38745549
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Это где писать?
...
Рейтинг: 0 / 0
12.09.2014, 21:26
    #38745633
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
так у представления имя составное в имени присутствует id, так как таких представлений много. Я хотел использовать функцию
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE FUNCTION ViewShop (@id)
RETURNS TABLE
AS
RETURN
(
	SELECT IDShop,
				RTRIM(NameShop) AS NameShop,
				RTRIM(Adress) AS Adress,
				RTRIM(Telephone) AS Telephone,
				IDTable
	FROM TableShop + @id



но как в FROM правильно указать имя не знаю, посоветуйте как сделать?
...
Рейтинг: 0 / 0
12.09.2014, 21:30
    #38745636
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Я вас не понимаю. Exec('create view ...') вы сделать в состоянии, а exec('select * from View*') нет?
...
Рейтинг: 0 / 0
12.09.2014, 21:39
    #38745646
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
я пробовал, но в функции не работает, еще я думал сделать процедуру но как вернуть из неё таблицу не знаю
...
Рейтинг: 0 / 0
12.09.2014, 23:09
    #38745683
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

alter procedure dbo.Creator
as begin
	exec ('create view dbo.TestView (id1, id2) as select 1, 2 union select 3, 4')
end
GO

alter function dbo.FromView()
returns table 
as return
	select * from openrowset('SQLOLEDB','Server=(local);Integrated Security=SSPI;TRUSTED_CONNECTION=YES', 'Select * From [ИМЯ_ВАШЕЙ_БД].[dbo].[TestView]') as tmpTable
GO


select * from dbo.FromView()



Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
id1         id2
----------- -----------
1           2
3           4

(2 row(s) affected)
...
Рейтинг: 0 / 0
13.09.2014, 00:04
    #38745712
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
dimasikus,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
EXEC('CREATE TABLE dbo.TableShop' + @id + ' ' +
			'( ' +
				'IDShop int IDENTITY(1, 1) PRIMARY KEY, ' +
				'NameShop char(40) NOT NULL, ' +
				'Adress char(40) NULL, ' +
				'Telephone char(40) NULL, ' + 
				'IDTable int NOT NULL ' +
			')'
		)

EXEC('CREATE VIEW dbo.ViewShop' + @id + ' ' +
			'AS ' +
			'SELECT ' +
				'IDShop, ' +
				'RTRIM(NameShop) AS NameShop, ' +
				'RTRIM(Adress) AS Adress, ' +
				'RTRIM(Telephone) AS Telephone, ' +
				'IDTable ' +
			'FROM TableShop' + @id
		)
...
Рейтинг: 0 / 0
13.09.2014, 00:07
    #38745713
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
dimasikus,

Но сам подход дурацкий. Создавать таблицы и вьюхи програмно - плохая практика.

З.Ы. Тема для форума MS SQL, а не для NET
...
Рейтинг: 0 / 0
13.09.2014, 00:16
    #38745721
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Cat2,
вы говорите подход дурацкий, вот мне надо чтобы таблицы пользователь сам создавал через приложение, я так решил сделать если можно по другому, то скажите как и посоветуйте где почитать
...
Рейтинг: 0 / 0
13.09.2014, 00:17
    #38745722
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Arm79,
спасибо за помощь
...
Рейтинг: 0 / 0
13.09.2014, 00:54
    #38745745
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
dimasikus,

Подход простой. Пользователю нужно создавать бизнес-сущности. А уж сделать такую физическую модель, чтобы на нее ложились эти сущности - уже ваша задача. Как вариант, рассмотрите EAV
...
Рейтинг: 0 / 0
13.09.2014, 00:58
    #38745748
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Ну и еще, если у вас внешнее приложение, почему бы в нем динамически не формировать запрос с нужным представлением? Зачем извращаться на сервере?
...
Рейтинг: 0 / 0
14.09.2014, 10:54
    #38746213
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
dimasikus,

1. Вы вероятно не обратили внимание на то, почему сработал вариант от Arm79 и должен сработать мой вариант.
Потому что в обоих случаях явно указывался ее владелец - dbo.
Когда пользователь создает какой-то объект в базе, то по умолчанию полное имя будет

[Base].[Owner].[Name]
Таким образом ваши пользователи насоздают кучу табличек и вьюх с именами:

User1.TableShop1
User1.ViewShop1

User2.TableShop2
User3.ViewShop2

User3.TableShop3
User3.ViewShop3

Понятно, что select * from ViewShop3 ничего не вернет, а даст ошибку, что такой таблице нет. И действительно - вьюхи dbo.ViewShop3 не существует. Потому что опускать имя владельца можно только если он - dbo.

Таким образом Вы должны дать всем права dbo, что ОЧЕНЬ нехорошо

2. Я не знаю Вашей задачи, но она наверняка не уникальна и тривиальна. Зачем Вы плодите кучу табличек с одной записью в каждой для каждого магазина, если все их можно хранить в одной таблице TableShop и отличать их по IDShop?

3. Могу посоветовать почитать форум Проектирование БД или что-нибудь про основы проектирования баз данных

===============
Arm79, зачем вы человека непонятными словами пугаете?
EAV можно применить тогда, когда все другие пути еще хуже.
...
Рейтинг: 0 / 0
14.09.2014, 12:45
    #38746231
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические таблицы
Cat2Arm79, зачем вы человека непонятными словами пугаете?
EAV можно применить тогда, когда все другие пути еще хуже.
Хе :-) По сравнению с динамическим созданием таблиц и представлений EAV - вершина архитектурной мысли.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Динамические таблицы / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]