Description

This PowerShell function will allow you to list your SQL Server table columns for the specified database. There's a help provided with examples. This function will load and remove the SQLPS module.

*Update - 05/10/2011: to include is_computed and is_nullable columns.

To use this function:

PS Z:\YourScriptLocation> . .\Get-dbTableColumns.ps1

PS Z:\YourScriptLocation> Help Get-dbTableColumns.ps1 -full

Requirements/Contribution:

  1. PowerShell V2 (for loading the module at either the PowerShell Console or usign the ISE). 
  2. Need SQL Server 2008 (or greater) installed.
  3. Download the community SQLPS and/or SQLPSv2 modules from the following links:

A.Download Chad Miller SQLPS module for SQL Server 2008 and 2008 R2: http://sev17.com/2010/07/making-a-sqlps-module/
B.Or, Download my version of SQLPSv2 for SQL Server ‘Denali’ CTP1: http://www.maxtblog.com/2010/11/denali-get-your-sqlpsv2-module-set-to-go/

Also, this scripts uses a modified version of a T-SQL script originally created by SQL MVP Pinal Dave found in this blog: http://blog.sqlauthority.com/2007/08/09/sql-server-2005-list-all-the-column-with-specific-data-types/

I'm showing a way you can use PowerShell to extend the T-SQL results.

I hope you enjoy this simple script.

Script

PowerShell
Edit|Remove
Function Get-dbTableColumns{ 
    <#  
    .SYNOPSIS 
        Gives you a list of all the tables column basic information of the specified Database.  
    .Description  
        Use an embed T-SQL Script use with SQL PowerShell module to query the database and list all tables column  
        information. This function can be use in PowerShell V1 and V2 but needs the SQL Server 2008 and SQLPS module  
        installed in order to run. It has the alias - 'gtc'. 
        This function will load the SQLPS module, and remove it when done. 
    .Parameter $dbname  
        SQLInstanceName - [String].  Enter the SQL Server or SQLServer\Instance name (optional) 
    .Parameter $Svrname 
        DatabaseName - [String].   Enter the Database Name. (required) 
    .Example  
        PS> Get-dbTableColumns -Database 'YourDatabaseName' 
         
        or using the alias: 
         
        PS> gtc -InstanceName 'InstanceName\ServerName' - Database 'YourDatabaseName' 
         
        Using the full function name with all paramaters. 
    .Notes  
        NAME: Get-dbTableColumns 
        Alias: gtc 
        AUTHOR: Max Trinidad      
        Created:  04/05/2011 17:10:01 - Version 0.1 - This is a basic function. 
        Compatibility - Version 2 
    .Link  
        about_functions  
        about_functions_advanced  
        about_functions_advanced_methods  
        about_functions_advanced_parameters  
    .Inputs 
        SQLInstanceName - [String] - Optional 
        DatabaseName - [String] - Required         
    .Outputs 
        Return [] - System Array Type Object 
#>  
Param( 
        [Parameter(Mandatory=$false, Position=0)] [string] $SQLInstanceName, 
        [Parameter(Mandatory=$true, Position=1)] [string] $DatabaseName 
) 
 
## - Stored T-SQL modified script into a string variable 
# Modified version T-SQL script from SQL MVP - Pinal Dave. 
$sqlQuery = @" 
select 
s.name+'.'+OBJECT_NAME(c.OBJECT_ID) as SchemaTableName 
,c.name AS ColumnName 
,SCHEMA_NAME(t.schema_id) AS SchemaName 
,t.name AS TypeName 
,c.max_length 
,c.is_computed 
,c.is_nullable 
FROM sys.columns AS c 
JOIN sys.types AS t ON c.user_type_id=t.user_type_id 
JOIN sys.tables as t2 on t2.object_id = c.object_id 
JOIN sys.schemas as s on s.schema_id = t2.schema_id 
ORDER BY c.OBJECT_ID, c.Column_Id; 
"@ 
 
    if ($SQLInstanceName.Length -eq 0){ $SQLInstanceName = '.' }; 
 
    Try{ 
        ## - Load the SQLPS module for Denali ( for 2008/200R2 is SQLPS) 
        #---------------------------------------------------------------- 
        # If you want to use SQLPSv2 then change the line below: 
         
        Import-Module SQLPS -DisableNameChecking 
        $Results1 = Invoke-SQLCmd -ServerInstance $SQLInstanceName ` 
                    -Database $DatabaseName -Query $sqlQuery 
        $Results1 | ft -auto -GroupBy SchemaTableName 
        Remove-Module SQLPS 
         
    } Catch { 
     
      Write-Host "Get-dbTableColumns $SQLInstanceName - $DatabaseName Failed!" -Fore red -back black 
     
    } 
 
}; Set-Alias gtc Get-dbTableColumns;