Example:
EXEC [Northwind]..sp_columns_rowset N'Products', N'dbo', NULL
Try this procedure as well.
CREATE PROCEDURE dbo.rp_ScriptTableColumnsList (
@vcDatabaseName varchar(128),
@vcTable varchar(128),
@bFormatted bit,
@bQuotedNames bit,
@bColumnListOnly bit,
@vcOUTSQL varchar(8000) OUTPUT
)
AS
/*
** Procedure
dbo.rp_ScriptTableColumnsList
** Description
Useful utility to script out columns in varying forms for use in calling procedures.
Can run for any table in any database by creating a dynamic script, and existing script
in database parameter in use.
** Parameters
** Requirements
** Usage
DECLARE @RC int
DECLARE @vcDatabaseName varchar(128)
DECLARE @vcTable varchar(128)
DECLARE @bFormatted bit
DECLARE @bQuotedNames bit
DECLARE @bColumnListOnly bit
DECLARE @vcOUTSQL varchar(8000)
SELECT
@vcDatabaseName = 'pubs',
@vcTable = 'authors',
@bFormatted = 1,
@bQuotedNames = 1,
@bColumnListOnly = 1
EXEC @RC = [master_admin].[dbo].[rp_ScriptTableColumnsList]
@vcDatabaseName, @vcTable, @bFormatted, @bQuotedNames, @bColumnListOnly, @vcOUTSQL OUTPUT
PRINT @vcOUTSQL
** Changes
2008-04-21 John Perry Created
*/
set nocount on
DECLARE
@vcSQL varchar(8000),
@vcSQLSource varchar(8000),
@vcFormatting varchar(2),
@vcSELECT varchar(10)
IF @bFormatted = 1
SET @vcFormatting = char(10)+ char(9)
ELSE
SET @vcFormatting = ''
IF @bColumnListOnly = 1
SET @vcSELECT = CASE
WHEN @bFormatted = 0 THEN '' ELSE CHAR(9) END
ELSE
SET @vcSELECT = 'SELECT ' + @vcFormatting
CREATE TABLE #tmpColumns (
[name] [sysname] NOT NULL ,
[id] [int] NOT NULL ,
[length] [smallint] NOT NULL ,
[colid] [smallint] NOT NULL ,
[colorder] [smallint] NOT NULL
)
SET @vcSQLSource = 'USE ' + @vcDatabaseName + '
INSERT INTO #tmpColumns
SELECT c.name, c.id, c.length, c.colid, c.colorder
FROM dbo.syscolumns c
JOIN dbo.sysobjects o
ON o.id = c.id
WHERE o.name = ''' + @vcTable + '''
ORDER BY
colorder'
-- Add the columns to the local temp table for the database in USE (within query).
EXEC (@vcSQLSource)
--
-- Create initial list of columns and query from results in temp table.
--
SELECT @vcSQL =
COALESCE(@vcSQL + ', ' + @vcFormatting , @vcSELECT ) +
CASE
WHEN @bQuotedNames = 1 THEN
QUOTENAME(name)
ELSE
name
END
FROM #tmpColumns
-- Clean up.
DROP TABLE #tmpColumns
--
-- Complete and format the SQL statement with the TABLE FROM statement, as needed.
--
IF @bColumnListOnly = 0
SET @vcSQL = @vcSQL +
CASE
WHEN @bFormatted = 0 THEN SPACE(1) ELSE CHAR(10) END
+ 'FROM ' + @vcDatabaseName + '.dbo.' + @vcTable
IF @bFormatted = 0
SET @vcSQL = REPLACE(@vcSQL, @vcFormatting, '')
--
-- Final return of requested SQL string.
--
SET @vcOUTSQL = LTRIM(@vcSQL)
GO