我有以下代码:
Declare @strSQL varchar(max);
set @strSQL = N'REALLY LONG QUERY';
exec (@strSQL) at <LinkedServerName>;
我这样做是因为查询超过8000个字符(无法更改,只有太多列)。它可以工作,但我需要将它插入到一个尚不存在的时态表中。所以,我不想事先运行create table。那么,我应该在哪里写INTO tmp_table以获得正确的语法?
例如,这不起作用:
exec (@strSQL) INTO tmp_table at <LinkedServerName>;
答案 0 :(得分:1)
Declare @strSQL varchar(max);
if object_id('tempdb..MyTempTable') is not null drop table tempdb.dbo.MyTempTable
set @strSQL = N'select * into tempdb.dbo.MyTempTable from (REALLY LONG QUERY) k';
exec (@strSQL) at <LinkedServerName>;
-- for check of existence of table for linkedserver add it into @strSQL
或
用临时表##Table
替换 tempdb.dbo.MyTempTable (对于本地服务器)
或
分解并规范化你的模型,如果你有数千个字符,你不需要动态qry但重新考虑你的解决方案 - 例如使用视图或转动你的输出