Application Note for QuNect ODBC for Quick Base

Create a table with all the fields in your Quick Base tables in SQL Server

The following stored procedure will create a table in SQL Server called qunect_fields. It will populate this table with one row for every field in all your Quick Base tables. If qunect_fields already exists it will drop (delete) the table and recreate it.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Claude von Roesgen
-- Create date: 3/5/2019
-- Description:	Create a table with all the fields in your Quick Base tables
-- =============================================
-- This stored procedure depends on the existence of a linked server called
-- Quick Base. To create this linked server run the following SQL:
--
-- EXEC sp_addlinkedserver 
-- @server = 'QuickBase', 
-- @provider = 'MSDASQL',
-- @srvproduct = 'QuNect',
-- @provstr = 'DRIVER={QuNect ODBC for QuickBase};UID=YourQuickBaseEmailOrScreenName;PWD=YourPassword' 
-- GO
--
-- After you have your linked server in place you're ready to run the stored 
-- procedure below. 
CREATE PROCEDURE [dbo].[fieldsForAllQuickBaseTables] 
AS
BEGIN
	SET NOCOUNT ON;
	if exists (select * from sysobjects where id = object_id(N'[dbo].[qunect_tables]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
	drop table [dbo].[qunect_tables]
	if exists (select * from sysobjects where id = object_id(N'[dbo].[qunect_fields]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
	drop table [dbo].[qunect_fields]
	CREATE TABLE [dbo].[qunect_tables] (
		[TABLE_QUALIFIER] [nvarchar] (128) NULL ,
		[TABLE_OWNER] [nvarchar] (128) NULL ,
		[TABLE_NAME] [nvarchar] (128) NULL ,
		[TABLE_TYPE] [nvarchar] (128) NULL ,
		[REMARKS] [varchar] (254) NULL
	) ON [PRIMARY]

	INSERT qunect_tables EXEC sp_tables_ex quickbase
	DECLARE @dbid nvarchar(128)
	DECLARE table_cursor CURSOR FOR SELECT TABLE_NAME FROM qunect_tables
	OPEN table_cursor
	FETCH NEXT FROM table_cursor INTO @dbid
	WHILE (@@FETCH_STATUS <> -1)
	BEGIN		
		IF (@@FETCH_STATUS <> -2)
		BEGIN
			PRINT 'Getting columns for ' + @dbid
			BEGIN
				BEGIN TRY
					EXEC('SELECT * INTO [qunect_fields] FROM OPENQUERY(QUICKBASE, ''select '''''+@dbid+''''' as dbid, [label]
      ,[COLUMN_NAME]
      ,[fid]
      ,[base_type]
      ,[field_type]
      ,[mode]
      ,[role]
      ,[abbreviate]
      ,[allow_new_choices]
      ,[allowHTML]
      ,[appears_as]
      ,[appears_by_default]
      ,[append_only]
      ,[auto_save]
      ,[blank_is_zero]
      ,[bold]
      ,[carrychoices]
      ,[choices]
      ,[comma_start]
      ,[currency_format]
      ,[currency_symbol]
      ,[decimal_places]
      ,[default_kind]
      ,[default_today]
      ,[default_value]
      ,[display_dow]
      ,[display_graphic]
      ,[display_month]
      ,[display_relative]
      ,[display_time]
      ,[display_user]
      ,[display_zone]
      ,[does_average]
      ,[does_total]
      ,[doesdatacopy]
      ,[fieldhelp]
      ,[find_enabled]
      ,[foreignkey]
      ,[format]
      ,[formula]
      ,[hours24]
      ,[mastag]
      ,[max_versions]
      ,[maxlength]
      ,[nowrap]
      ,[num_lines]
      ,[numberfmt]
      ,[parentFieldID]
      ,[required]
      ,[see_versions]
      ,[sort_as_given]
      ,[isunique]
      ,[use_new_window]
      ,[width]
      ,[iskey]
      ,[lusfid]
      ,[lutfid]
      ,[snapfid] from "'+@dbid+'~fields"'')')
	  ALTER TABLE [qunect_fields] ALTER COLUMN dbid nvarchar(256) ; 
				END TRY
				BEGIN CATCH
                    EXEC('INSERT INTO [qunect_fields] SELECT * FROM OPENQUERY(QUICKBASE, ''select '''''+@dbid+''''' as dbid, [label]
      ,[COLUMN_NAME]
      ,[fid]
      ,[base_type]
      ,[field_type]
      ,[mode]
      ,[role]
      ,[abbreviate]
      ,[allow_new_choices]
      ,[allowHTML]
      ,[appears_as]
      ,[appears_by_default]
      ,[append_only]
      ,[auto_save]
      ,[blank_is_zero]
      ,[bold]
      ,[carrychoices]
      ,[choices]
      ,[comma_start]
      ,[currency_format]
      ,[currency_symbol]
      ,[decimal_places]
      ,[default_kind]
      ,[default_today]
      ,[default_value]
      ,[display_dow]
      ,[display_graphic]
      ,[display_month]
      ,[display_relative]
      ,[display_time]
      ,[display_user]
      ,[display_zone]
      ,[does_average]
      ,[does_total]
      ,[doesdatacopy]
      ,[fieldhelp]
      ,[find_enabled]
      ,[foreignkey]
      ,[format]
      ,[formula]
      ,[hours24]
      ,[mastag]
      ,[max_versions]
      ,[maxlength]
      ,[nowrap]
      ,[num_lines]
      ,[numberfmt]
      ,[parentFieldID]
      ,[required]
      ,[see_versions]
      ,[sort_as_given]
      ,[isunique]
      ,[use_new_window]
      ,[width]
      ,[iskey]
      ,[lusfid]
      ,[lutfid]
      ,[snapfid] from "'+@dbid+'~fields"'')')
				END CATCH
			END
		END
		FETCH NEXT FROM table_cursor INTO @dbid
	END
	DEALLOCATE table_cursor   
END