Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Интернет -

Microsoft SQL Server - Общие вопросы

Все примеры / Общие вопросы

Использование INSERT...SELECT в динамичных запросах

Автор: Интернет | добавлено: 04.02.2011, 20:53 | просмотров: 2868 (1+) | комментариев: 0 | рейтинг: *x1
Пример демонстрирует вставку данных при помощи инструкции INSERT из программно созданного SQL-запроса.

Код

-- временная таблица, чтобы было на чем показывать пример
CREATE TABLE Orders (
  OrderID int IDENTITY (1, 1) NOT NULL ,
  CustomerID nchar (5) NULL ,
  EmployeeID int NULL ,
  OrderDate datetime NULL ,
  RequiredDate datetime NULL ,
  ShippedDate datetime NULL ,
  ShipVia int NULL ,
  Freight money NULL DEFAULT (0),
  ShipName nvarchar (40) NULL ,
  ShipAddress nvarchar (60) NULL ,
  ShipCity nvarchar (15) NULL ,
  ShipRegion nvarchar (15) NULL ,
  ShipPostalCode nvarchar (10) NULL ,
  ShipCountry nvarchar (15) NULL
)
GO

-- основная часть примера
DECLARE
@schemaname AS NVARCHAR(128),
@tablename  AS NVARCHAR(128),
@colname    AS NVARCHAR(128),
@sql        AS NVARCHAR(805),
@cnt       AS INT;

SET @schemaname = N'dbo';
SET @tablename  = N'Orders';
SET @colname    = N'CustomerID';
SET @sql = N'SELECT COUNT(DISTINCT '
+ QUOTENAME(@colname) + N') FROM '
+ QUOTENAME(@schemaname)
+ N'.'
+ QUOTENAME(@tablename)
+ N';';

-- создаем временную таблицу, 
-- в нее будут вставлены данных из созданного программно запроса
CREATE TABLE #T(cnt INT);

-- собственно, сама вставка данных
INSERT INTO #T
EXEC(@sql);

-- вывод, чтобы было видно, что пример работает
SET @cnt = (SELECT cnt FROM #T);
SELECT @cnt;
GO

-- удаление временной таблицы
DROP TABLE #T;
GO

-- удаление таблицы созданной для примера
drop table orders;
GO

Как это работает?

INSERT INTO #T
EXEC(@sql);
Об авторе

Интернет

Анонимный пользователь сети Интернет. Автор великого множества кодов и программных решений. Никого никогда не видел в лицо этого пользователя, ходят слухи, что он многоликий, и может одновременно находиться в разных частях света.
Интернет
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики