-- SQL Server SELECT INTO - sql server select into new table
-- select all persons into new table with last name starting with 'A'
SELECT ID=BusinessEntityID, FullName=FirstName + ' '+ LastName
INTO ListA
FROM AdventureWorks2008.Person.Person WHERE LEFT(LastName,1) = 'A'
------------
-- SQL select into table create - sql select into syntax - sql create table select
-- Create table from select sql server - sql select into statement
-- Select into sql server - select into temp table - create table as select
-- Insert data from one table to another table in sql - sql select into table
USE AdventureWorks2008;
SELECT * INTO dbo.SalesOrderHeader FROM Sales.SalesOrderHeader WHERE Year(OrderDate)=2004
SELECT TOP (0) SalesOrderID, OrderDate INTO SOH FROM Sales.SalesOrderHeader
SELECT * INTO SOH FROM Sales.SalesOrderHeader
SELECT * INTO SOH1 FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate)=2004
SELECT * INTO SOH2 FROM Sales.SalesOrderHeader ORDER BY SalesOrderID desc
SELECT SalesOrderID, OrderDate, SubTotal INTO SOH3 FROM Sales.SalesOrderHeader
-- SQL select into group by - transact sql group by - sql server select into table
SELECT [Year]=YEAR(OrderDate), Orders=COUNT(*)
INTO SOH4 FROM Sales.SalesOrderHeader GROUP BY YEAR(OrderDate)
SELECT *, [CreateDate]=getdate() INTO SOH5 FROM Sales.SalesOrderHeader
-- SQL Server select into temporary table - sql server select into temp table
SELECT TotalOrders = COUNT(*) INTO #TotalOrders FROM Sales.SalesOrderHeader
SELECT ProductID = CAST(ProductID as INT), ListPrice, Color
INTO #ProdList FROM Production.Product ORDER BY ListPrice desc
SELECT Name=CONVERT(VARCHAR(45),NULL), Age=CONVERT(INT,NULL) INTO tempdb.dbo.Person
SELECT TOP (100) * INTO POH FROM Purchasing.PurchaseOrderHeader ORDER BY NEWID()
SELECT TOP (0) * INTO POH1 FROM Purchasing.PurchaseOrderHeader
SELECT * INTO #spwho FROM OPENQUERY (DELLSTAR,'exec sp_who') -- select into from sproc
-- SQL select into from joined tables - sql join - sql server select into new table
SELECT soh.SalesOrderID, OrderDate, OrderQty, ProductID INTO SalesOrder
FROM Sales.SalesOrderHeader soh
INNER JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID=sod.SalesOrderID
/* SELECT INTO creates a brand new permanent or temporary table and populates
it with the result set, if any, of the SELECT query. The SELECT INTO
statement can be used to combine data from one or more tables or views into
one new table in the same or different database. It can also be used just to
create an empty table. The IDENTITY property will carry over to the new table,
to prevent it see example further down.*/
-- SQL select into copy table - sql select into from table
-- SQL select into table create - quick overview of select into create table
USE [AdventureWorks2008]; - Create table as select table
SELECT * INTO dbo.Location FROM Production.Location
/*
(1 row(s) affected) - 1 table is created
(14 row(s) affected) - table is populated with 14 rows
*/
-- Script out new table using Management Studio Object Explorer
-- IDENTITY property on LocationID is inherited - No indexes or constraints created
/* CREATE TABLE [dbo].[Location](
[LocationID] [smallint] IDENTITY(1,1) NOT NULL,
[Name] [dbo].[Name] NOT NULL,
[CostRate] [smallmoney] NOT NULL,
[Availability] [decimal](8, 2) NOT NULL,
[ModifiedDate] [datetime] NOT NULL
) ON [PRIMARY] */
-- Cleanup - sql delete table
DROP TABLE dbo.Location
------------
-- SQL Server select into variable
DECLARE @Price money, @Product varchar(32)
SELECT @Product=Name, @Price = ListPrice
FROM AdventureWorks2008.Production.Product
WHERE ProductID = 800
SELECT ProductName=@Product, ListPrice=@Price
/* ProductName ListPrice
Road-550-W Yellow, 44 1120.49 */
------------
-- 1. Create an empty table with the same layout as the Sales.Currency table.
USE AdventureWorks;
-- Create an empty curreny table - SQL select into create table
-- SQL create table with select into - Create table as select sql server
SELECT * INTO Sales.NewCurrency
FROM Sales.Currency
WHERE 1 > 2 -- Condition never fulfilled
--(0 row(s) affected)
/* Equivalent code
CREATE TABLE [Sales].[NewCurrency](
[CurrencyCode] [nchar](3) NOT NULL,
[Name] [dbo].[Name] NOT NULL,
[ModifiedDate] [datetime] NOT NULL
) ON [PRIMARY]
*/
SELECT * FROM Sales.NewCurrency
GO
-- (0 row(s) affected)
-- Add default for ModifiedDate
ALTER TABLE Sales.NewCurrency ADD CONSTRAINT
DF_NewCurrency_ModifiedDate DEFAULT getdate() FOR ModifiedDate
GO
-- Transact sql populate table
INSERT Sales.NewCurrency (CurrencyCode, Name) VALUES ('USD', 'US Dollar')
INSERT Sales.NewCurrency (CurrencyCode, Name) VALUES ('EUR', 'EURO')
GO
-- SQL query table
SELECT * FROM Sales.NewCurrency
GO
/*
CurrencyCode Name ModifiedDate
USD US Dollar 2008-12-18 23:50:56.290
EUR EURO 2008-12-18 23:52:00.193
*/
-- MSSQL delete table
DROP TABLE Sales.NewCurrency
------------
-- 2. SELECT INTO use in stored procedures.
-- SQL select into stored procedure - SELECT INTO SQL Server
-- SQL create table from another table - SQL server create table as select
USE AdventureWorks2008;
GO
CREATE PROCEDURE sprocDailySales @Date date
AS
BEGIN
-- SELECT INTO temporary table - create table select mssql - select into temp table sql
SELECT SalesOrderID
INTO #SOH
FROM Sales.SalesOrderHeader
WHERE OrderDate = @Date
SELECT [Date]=@Date,
TotalQty = SUM(OrderQty),
TotalDollar = SUM(LineTotal)
FROM #SOH
INNER JOIN Sales.SalesOrderDetail sod
ON #SOH.SalesOrderID = sod.SalesOrderID
END
GO
EXEC sprocDailySales '2004-02-02'
GO
/* Results
Date TotalQty TotalDollar
2004-02-02 148 49410.450000
*/
------------
-- 3. SELECT INTO new table from stored procedure execution.
-- SQL select into from stored procedure - SQL OPENROWSET statement
-- Create table select sql server - sqlserver create table as select
SELECT *
INTO #BOM
FROM OPENROWSET ( 'SQLOLEDB','SERVER=.;Trusted_Connection=yes',
'SET FMTONLY OFF EXEC AdventureWorks.dbo.uspGetBillOfMaterials 800, ''2004-02-01''');
GO
-- SELECT from temporary table
SELECT * FROM #BOM ORDER BY BOMLevel, ComponentDesc
GO
/* Partial results
ProductAssemblyID ComponentID ComponentDesc TotalQuantity StandardCost
800 952 Chain 1.00 8.9866
800 948 Front Brakes 1.00 47.286
800 945 Front Derailleur 1.00 40.6216
*/
DROP TABLE #BOM
------------
-- 4. Create empty table based on the Production.Product table.
-- SQL create table as select
-- Creating an empty table without inheriting the identity property
-- If no CONVERT, the identity property will be set for ProductID
SELECT TOP (0) ProductID=CONVERT(int, ProductID),
ProductName=Name, ListPrice, Color
INTO dbo.testProduct
FROM Production.Product
GO
/* Equivalent code:
CREATE TABLE [dbo].[testProduct](
[ProductID] [int] NULL,
[ProductName] [dbo].[Name] NOT NULL,
[ListPrice] [money] NOT NULL,
[Color] [nvarchar](15) NULL
) ON [PRIMARY]
*/
-- We can insert into ProductID due to identity off
INSERT testProduct VALUES (1001, 'Rocky Mountain Bike', 900.0, 'Blue')
GO
-- Delete table
DROP TABLE testProduct
------------
-- 5. Copy table, structure & content, with select into for test and development.
USE tempdb;
-- SQL select * into table
-- SQL select into tempdb
SELECT * INTO EPH FROM AdventureWorks.HumanResources.EmployeePayHistory
GO
-- SQL select from new table
SELECT EmployeeID, RateChangeDate
FROM EPH
WHERE RateChangeDate BETWEEN '19971101' AND '19980105'
GO
/* Results
EmployeeID RateChangeDate
3 1997-12-12 00:00:00.000
4 1998-01-05 00:00:00.000
*/
-- SQL update select into table
UPDATE EPH SET RateChangeDate = '1998-01-05 00:00:01.000'
WHERE EmployeeID = 4
AND RateChangeDate = '19980105'
GO
-- SQL drop table
DROP TABLE tempdb.dbo.EPH
------------
-- 6. Create populated copy of Sales.SalesOrderHeader and empty it with TRUNCATE.
-- The following SELECT INTO query will create a populated table copy
USE tempdb;
-- SQL SELECT INTO table
-- SQL Server CREATE TABLE as SELECT
SELECT * INTO SOH
FROM AdventureWorks.Sales.SalesOrderHeader
ORDER BY SalesOrderID
GO
-- (31465 row(s) affected)
-- Empty table by truncating
TRUNCATE TABLE SOH
GO
-- Command(s) completed successfully.
SELECT COUNT(*) FROM SOH
-- Result: 0
------------
-- 7. Create a temporary table with SELECT INTO based on Product table.
-- SQL create empty temporary table - SQL Server SELECT INTO
-- SQL select into temp table - sql server select into temp table
-- SQL sequential numbering - sql server identity
-- SQL sequential update - mapping non-sequential numbers to sequential numbers
SELECT TOP (0) ID=identity(int,1,1),
ProductID=CAST(ProductID AS INT),
ListPrice, Color
INTO #Product
FROM Production.Product
GO
-- SQL insert select - populate table
-- SQL Server select into existing table
INSERT INTO #Product (ProductID, ListPrice, Color)
SELECT TOP (5) ProductID, ListPrice, Color
FROM Production.Product
WHERE ListPrice > 0.0 and Color is not NULL
GO
-- SQL select from temp table
SELECT * FROM #Product
GO
/* Results
ID ProductID ListPrice Color
1 680 1431.50 Black
2 706 1431.50 Red
3 707 34.99 Red
4 708 34.99 Black
5 709 9.50 White
*/
------------
-- 8. Create populated table with SELECT INTO from Person.Contact.
-- select into sql server
-- create new table and populate it in one query
-- SQL use
USE tempdb;
-- SQL top function
-- SQL newid - random sorting
-- SQL 3-parts reference
-- SQL select random 5 rows
SELECT TOP(5)
ContactID,
FullName = FirstName+' '+LastName,
Email=EmailAddress
INTO Person
FROM AdventureWorks.Person.Contact
WHERE EmailPromotion = 2
ORDER BY NEWID()
-- SQL select all columns
SELECT *
FROM Person
/* Results
ContactID FullName Email
4303 Luke Flores luke1@adventure-works.com
8654 Danielle Stewart danielle26@adventure-works.com
13340 Lori Ortega lori22@adventure-works.com
8799 Gilbert Nath gilbert38@adventure-works.com
5487 Austin Shan austin28@adventure-works.com
*/
-- SQL drop table
DROP TABLE Person
GO
------------
-- 9. Copy table into a different database with SELECT INTO .
-- SQL copy table with select into
-- Create table as select sql server
-- Copy table from one database to another with select into
-- SQL add column to new table
USE tempdb;
SELECT *, CopyDate = GETDATE()
INTO Department
FROM AdventureWorks.HumanResources.Department
ORDER BY DepartmentID
GO
SELECT DepartmentID, Department=Name, CopyDate
FROM Department ORDER BY DepartmentID
GO
/* Partial results
DepartmentID Department CopyDate
1 Engineering 2012-01-08 15:09:59.997
2 Tool Design 2012-01-08 15:09:59.997
3 Sales 2012-01-08 15:09:59.997
*/
-- SQL drop table
DROP TABLE Department
GO
------------
-- 10. SELECT INTO create table; remap dates with UPDATE statement.
USE tempdb;
-- SQL Server select into
SELECT TOP 100 *
INTO PurchaseOrderHeader
FROM AdventureWorks.Purchasing.PurchaseOrderHeader
ORDER BY NEWID()
GO
-- SQL server create table as select
-- Remap order dates to recent dates
-- SQL multiple value assignment
DECLARE @OrderDate datetime
SET @OrderDate = getdate()
UPDATE PurchaseOrderHeader
SET @OrderDate = OrderDate = dateadd(day,-1,@OrderDate)
GO
SELECT TOP (5) PurchaseOrderID, VendorID,OrderDate
FROM PurchaseOrderHeader
GO
/* Results
PurchaseOrderID VendorID OrderDate
2848 12 2012-01-08 10:07:27.663
91 80 2012-01-07 10:07:27.663
2788 37 2012-01-06 10:07:27.663
1538 69 2012-01-05 10:07:27.663
3687 72 2012-01-04 10:07:27.663
*/
-- SQL drop table
DROP TABLE tempdb.dbo.PurchaseOrderHeader
GO
----------
-- 11. SELECT INTO existing table workaround.
-- SQL select into existing table
USE tempdb;
-- First we create a table with select into
-- SQL create table as select
SELECT PurchaseOrderID = CAST (PurchaseOrderID AS INT),
RevisionNumber, [Status], EmployeeID, VendorID,
ShipMethodID, OrderDate, ShipDate, SubTotal, TaxAmt, Freight,
TotalDue, ModifiedDate
INTO POH
FROM AdventureWorks.Purchasing.PurchaseOrderHeader
GO
-- Instead of select into, we do truncate first, then insert select
TRUNCATE TABLE POH;
-- SQL insert into select
-- SQL select into existing table
INSERT INTO POH
SELECT * FROM AdventureWorks.Purchasing.PurchaseOrderHeader
GO
-- SQL drop table
DROP TABLE tempdb.dbo.POH
GO
----------
-- 12. SELECT INTO table create from a complex query.
-- SQL select into from multiple tables
-- Create table with select into from complex query
USE AdventureWorks;
SELECT SalesStaff =C.LastName+', '+ C.FirstName
, ZipCode = A.PostalCode
, TotalSales='$'+CONVERT(varchar, convert(money,SUM(SOD.LineTotal)),1)
, PercentOfTotal = CAST(100.0* SUM(SOD.LineTotal) / SUM(SUM(SOD.LineTotal))
OVER (PARTITION BY 1, 2 ) AS NUMERIC (4,1))
INTO tempdb.dbo.SalesStaffReport
FROM Person.Contact C
INNER JOIN Person.[Address] A
ON A.AddressID = C.ContactID
INNER JOIN Sales.SalesOrderHeader SOH
ON SOH.SalesPersonID = C.ContactID
INNER JOIN Sales.SalesOrderDetail SOD
ON SOD.SalesOrderID = SOH.SalesOrderID
WHERE TerritoryID IS NOT NULL
GROUP BY C.FirstName, C.LastName, A.PostalCode, C.ContactID
ORDER BY SalesStaff, ZipCode
GO
-- SQL select random
SELECT TOP (5) *
FROM tempdb.dbo.SalesStaffReport
ORDER BY NEWID()
GO
/* Results:
SalesStaff ZipCode TotalSales PercentOfTotal
Esteves, Janeth 98055 $1,827,066.71 2.3
Elliott, Shannon 98027 $3,325,092.59 4.1
Elson, Jauna 98055 $6,427,005.55 8.0
Dusza, Maciej 98027 $9,293,903.00 11.5
Dyck, Shelley 98027 $10,367,007.43 12.9
*/
-- SQL drop table
DROP TABLE tempdb.dbo.SalesStaffReport
GO
----------
-- 13. SELECT INTO new table from system procedure execution.
-- SQL select into temporary table
-- SQL openrowset system procedure execution
SELECT * INTO #spwho
FROM OPENROWSET ( 'SQLOLEDB','SERVER=.;Trusted_Connection=yes',
'SET FMTONLY OFF EXEC sp_who');
GO
SELECT * FROM #spwho
GO
/* Partial results
spid ecid status loginame hostname blk
1 0 background sa 0
2 0 background sa 0
3 0 suspended sa 0
*/
-- SQL select into create temporary table
-- SQL openquery system procedure execution
SELECT DB=DB_NAME(dbid),* INTO #splock
FROM OPENQUERY(DELLSTAR, 'EXEC sp_lock')
SELECT TOP(2) * FROM #splock
GO
/* Results
DB spid dbid ObjId IndId Type Resource Mode Status
msdb 51 4 0 0 DB S GRANT
Accounting 52 23 0 0 DB S GRANT
*/
----------
-- 14. SELECT INTO new table from dynamic stored procedure execution.
----------
-- Dynamic stored procedure to temporary table
----------
USE tempdb;
GO
-- SQL create dynamic stored procedure
CREATE PROCEDURE DynamicSprocToTempTable
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SELECT top (5) * from AdventureWorks.Purchasing.PurchaseOrderHeader
ORDER BY NEWID()'
-- Dynamic SQL
EXEC Sp_executesql @SQL
END
GO
-- Test stored procedure
EXEC tempdb.dbo.DynamicSprocToTempTable
GO
-- Select into temporary table from OPENQUERY
-- SQL select into temp table
SELECT * INTO #poh
FROM Openquery(SERVERALPHA,'exec tempdb.dbo.DynamicSprocToTempTable')
GO
SELECT PurchaseOrderID, VendorID, OrderDate
FROM #poh
/* Results
PurchaseOrderID VendorID OrderDate
2662 50 2004-05-19 00:00:00.000
2454 44 2004-05-01 00:00:00.000
2547 96 2004-05-10 00:00:00.000
901 54 2003-10-13 00:00:00.000
2675 74 2004-05-22 00:00:00.000
*/
GO
-- Cleanup
DROP PROCEDURE DynamicSprocToTempTable
DROP TABLE #poh
----------
-- 15. SELECT INTO new table with UNIQUE ID column.
USE tempdb;
-- SQL select into with identity function
SELECT TOP (100) ID=identity(int,1,1),
PurchaseOrderID=convert(int,PurchaseOrderID), OrderDate
INTO POH
FROM AdventureWorks.Purchasing.PurchaseOrderHeader ORDER BY NEWID()
GO
SELECT * from POH
GO
/* Partial results
ID PurchaseOrderID OrderDate
1 447 2003-09-06 00:00:00.000
2 1881 2004-03-07 00:00:00.000
3 2519 2004-05-08 00:00:00.000
4 1404 2004-01-13 00:00:00.000
*/
DROP TABLE tempdb.dbo.POH
GO
-- SQL select into with row_number function
SELECT TOP (100) ID=ROW_NUMBER() OVER(ORDER BY OrderDate DESC),
PurchaseOrderID, OrderDate
INTO POH
FROM AdventureWorks.Purchasing.PurchaseOrderHeader
GO
SELECT * from POH
GO
/* Partial results
ID PurchaseOrderID OrderDate
1 4002 2004-10-23 00:00:00.000
2 3985 2004-09-03 00:00:00.000
3 3986 2004-09-03 00:00:00.000
4 3987 2004-09-03 00:00:00.000
5 3988 2004-09-03 00:00:00.000
*/
DROP TABLE tempdb.dbo.POH
GO
----------
-- 16. SELECT INTO table create is very fast.
-- SELECT INTO is minimally logged - inside transaction only
-- SELECT INTO not logged into the transaction log file
-- SELECT INTO table cannot be recovered with transaction log restore
-- SELECT INTO table can only be recovered after full database backup
USE AdventureWorks2008;
BEGIN TRANSACTION
SELECT * INTO ProdZ FROM Production.Product
SELECT COUNT(*) FROM ProdZ
-- Result: 504
ROLLBACK TRANSACTION
SELECT COUNT(*) FROM ProdZ
/* Msg 208, Level 16, State 1, Line 6
Invalid object name 'ProdZ'.
*/
----------
-- 17. SELECT INTO temporary table with GROUP BY aggregate query.
-- List bestseller products
-- SQL select into temporary table
USE Northwind;
SELECT ProductName,
TotalSold = Sum(Quantity)
INTO #BestSellerProducts
FROM [Order Details] od
INNER JOIN Products p
ON p.ProductID = od.ProductID
GROUP BY ProductName
HAVING Sum(Quantity) > 1.75 * (SELECT Avg(TotalSold)
FROM (SELECT TotalSold = (Sum(Quantity))
FROM [Order Details]
GROUP BY ProductID) x)
ORDER BY TotalSold DESC
GO
SELECT * FROM #BestSellerProducts
GO
/* Results
ProductName TotalSold
Camembert Pierrot 1577
Raclette Courdavault 1496
Gorgonzola Telino 1397
Gnocchi di nonna Alice 1263
*/
-- Cleanup
DROP TABLE #BestSellerProducts
GO
----------
-- 18. Using SELECT INTO solution instead of deleting many (i.e. millions) rows.
-- SQL using SELECT INTO instead of huge delete - SQL delete table
-- SQL Server large delete - SQL delete millions of rows
-- Note: this is a demo only with small tables
USE tempdb;
SELECT *
INTO SOH
FROM AdventureWorks.Sales.SalesOrderHeader
GO
-- (31464 row(s) affected)
SELECT count(* )
FROM SOH
GO
-- 31464
/* We need to delete all records prior to 2004/01/01 like:
delete SOH where OrderDate < '2004-01-01'
Since DELETE is a logged operation, it may take long especially with multiple indexes.
Instead we build a brand new table with the records we need to keep
and rebuild the indexes, defaults, etc, finally we switch the table with sp_rename.
*/
-- Select into records we want to keep
SELECT *
INTO SOHStage
FROM SOH
WHERE OrderDate >= '2004-01-01'
GO
-- (13950 row(s) affected)
-- SQL rename tables - switch new trimmed table for current table
BEGIN TRANSACTION
EXEC sp_rename
SOH ,
SOHArchive
EXEC sp_rename
SOHStage ,
SOH
COMMIT TRANSACTION
GO
/* Messages
Caution: Changing any part of an object name could break scripts and stored procedures.
Caution: Changing any part of an object name could break scripts and stored procedures.
*/
SELECT count(* )
FROM SOH
GO
-- 13950
-- Cleanup
DROP TABLE tempdb.dbo.SOH
DROP TABLE tempdb.dbo.SOHArchive
GO
------------
-- 19. Using SELECT INTO temporary table from view.
-- Select into temporary table from view
-- Select from view into table
-- SQL currency formatting - format money
-- SQL coalesce
SELECT
[FullName]
,[SalesPersonID] AS StaffID
,[SalesTerritory]
,COALESCE('$'+convert(varchar,[2002],1),'') AS [2002]
,COALESCE('$'+convert(varchar,[2003],1),'') AS [2003]
,COALESCE('$'+convert(varchar,[2004],1),'') AS [2004]
INTO #Sales
FROM [AdventureWorks].[Sales].[vSalesPersonSalesByFiscalYears]
ORDER BY FullName
GO
SELECT * FROM #Sales
ORDER BY FullName
GO
/* Partial results
FullName StaffID SalesTerritory 2002
David R Campbell 283 Northwest $1,017,402.86
Garrett R Vargas 278 Canada $930,259.47
Jae B Pak 285 United Kingdom
Jillian Carson 277 Central $2,737,537.88
José Edvaldo Saraiva 282 Canada $2,088,491.17
Linda C Mitchell 276 Southwest $2,260,118.45
*/
-- Cleanup
DROP TABLE #Sales
GO
------------
-- 20. Using SELECT INTO for random sampling of a large table.
-- SQL Random Select - See also tablesample
-- Random sampling in T-SQL - SQL Server random row selection
SELECT TOP (2) PERCENT * INTO SOHsample
FROM AdventureWorks2008.Sales.SalesOrderHeader
-- (630 row(s) affected)
------------
-- 21. SELECT INTO from STORED PROCEDURE EXECUTION.
-- SQL select into table create from sproc
-- T-SQL dynamic SQL OPENQUERY - QUOTENAME
/*
DATA ACCESS to current SQL Server instance can be setup the following way
exec sp_serveroption @server = 'PRODSVR\SQL2008'
,@optname = 'DATA ACCESS'
,@optvalue = 'TRUE'
This way, OPENQUERY can be used against current instance
(Usually OPENQUERY is used to access linked servers.)
*/
-- SQL 2008 new feature: instant assignment to @localvariable
DECLARE @DynamicQuery nvarchar(max) =
'SELECT *
INTO BikeBOM
FROM OPENQUERY(' + QUOTENAME(CONVERT(sysname, @@SERVERNAME))+ ',
''EXECUTE [AdventureWorks2008].[dbo].[uspGetWhereUsedProductID] 400,
''''2003-11-21'''''')'
PRINT @DynamicQuery
/*
SELECT *
INTO BikeBOM
FROM OPENQUERY([PRODSVR\SQL2008],
'EXECUTE [AdventureWorks2008].[dbo].[uspGetWhereUsedProductID] 3,
''2003-12-01''')
*/
EXEC sp_executeSQL @DynamicQuery
SELECT TOP ( 5 ) *
FROM BikeBOM
ORDER BY NEWID()
GO
/* Partial results
ProductAssemblyID ComponentID ComponentDesc
765 826 Road-650 Black, 58
769 826 Road-650 Black, 48
823 400 LL Mountain Rear Wheel
985 823 Mountain-500 Silver, 42
983 815 Mountain-400-W Silver, 46
*/
-- Cleanup
DROP TABLE BikeBOM
GO
------------
-- 22. SELECT INTO import data from Excel worksheet with distributed query .
-- T-SQL import Excel worksheet into database table
SELECT *
INTO ContactList
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=F:\data\excel\Contact.xls', 'SELECT * FROM [Contact$]')
-- (19972 row(s) affected)
------------