Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- EXEC master.dbo.sp_addlinkedserver @server = N'POSTGRESQL', @srvproduct=N'PostgreSQL', @provider=N'MSDASQL', @datasrc=N'PostgreSQL'
- EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'POSTGRESQL',@useself=N'False',@locallogin=NULL,@rmtuser=N'xxxxxx',@rmtpassword='xxxxx'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'collation compatible', @optvalue=N'false'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'data access', @optvalue=N'true'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'dist', @optvalue=N'false'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'pub', @optvalue=N'false'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'rpc', @optvalue=N'true'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'rpc out', @optvalue=N'true'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'sub', @optvalue=N'false'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'connect timeout', @optvalue=N'0'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'collation name', @optvalue=null
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'lazy schema validation', @optvalue=N'false'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'query timeout', @optvalue=N'0'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'use remote collation', @optvalue=N'true'
- EXEC master.dbo.sp_serveroption @server=N'POSTGRESQL', @optname=N'remote proc transaction promotion', @optvalue=N'false'
- ALTER PROCEDURE [dbo].[SP_Name]
- @DateFrom DATETIME,
- @DateTo DATETIME
- AS
- DECLARE @variableB int
- SET @variableB= {some criteria}
- IF (@variableB < 1000)
- BEGIN
- -- Passthrough to PG for a filtered table, instead of entire table grabbed via open query
- IF OBJECT_ID('tempdb.dbo.#temp_table1', 'U') IS NOT NULL
- DROP TABLE #temp_table1;
- create table #temp_table1 (column1 int, column2 varchar(60))
- DECLARE @TSQL varchar(max)
- SET @TSQL = 'select c1, c2 from OpenQuery([POSTGRESQL],''
- select c1, c2 from table1 t where
- t.date>=''''' +CONVERT(VARCHAR(15),@DateFrom,102)+ '''''' + 't.date <=''''' +CONVERT(VARCHAR(15),@DateTo,102) + '''''' +'order by c1'')'
- insert into #temp_table1
- EXEC (@TSQL)
- create clustered index temp_index1 on #temp_table1
- (column1 asc)
- WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
- -- 2nd table passthrough to PG for a filtered table, instead of entire table grabbed via open query
- IF OBJECT_ID('tempdb.dbo.#temp_table2', 'U') IS NOT NULL
- DROP TABLE temp_table2;
- create table #temp_table2 (column1 int, column2 varchar(60), column3 int)
- SET @TSQL = 'select a, b, c from OpenQuery([POSTGRESQL],''
- select a, b, c from table2 t where
- t.date>=''''' +CONVERT(VARCHAR(15),@DateFrom,102)+ '''''' + 't.date <=''''' +CONVERT(VARCHAR(15),@DateTo,102) + '''''' +'order by a'')'
- insert into #temp_table2
- EXEC (@TSQL)
- -- 3rd table passthrough to PG for a filtered table, instead of entire table grabbed via open query
- IF OBJECT_ID('tempdb.dbo.#temp_table3', 'U') IS NOT NULL
- DROP TABLE temp_table3;
- create table #temp_table3 (column1 int, column2 varchar(60))
- SET @TSQL = 'select a1, a2, a3 from OpenQuery([POSTGRESQL],''
- select a1, a2, a3
- from
- table3 t
- where
- t.date>=''''' +CONVERT(VARCHAR(15),@DateFrom,102)+ '''''' + 't.date <=''''' +CONVERT(VARCHAR(15),@DateTo,102) + ''''''
- {plus other filtering criteria} +'order by a1'')'
- insert into #temp_table2
- EXEC (@TSQL)
- IF (@variableB < 1000)
- BEGIN
- select {many columns}
- from {various local tables with left joins}
- left join #temp_table1 on {conditions}
- left join #temp_table2 on {conditions}
- left join #temp_table3 on {conditions}
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement