对于数据透视表的连接,我有以下CommandText
:
SET NOCOUNT ON
CREATE TABLE #temptable
(KonPos integer, KonStk integer);
INSERT INTO #temptable (KonPos, KonStk) Values
(1,1),(2,1),(3,1);
SELECT
a.*,
b.*
FROM
#temptable a LEFT JOIN dbTable b ON a.KonPos = b.Position
DROP TABLE #temptable;
我使用VBA创建插入的行,临时表比这更复杂但不用说,字符串的大小太大了。
如果有人想知道如何创建查询:
sQuery = sQuery & "INSERT INTO #temptable (KonPos, KonStk) Values" & Chr(10)
sQuery = sQuery & Join(TableRows, ",") & ";"
此命令替换CommandText:
wbCn.CommandText = ReplaceQueryTempTalbe(sQuery, wbCn.CommandText)
除了用表行替换查询中的占位符外,它什么也没做。
任何有解决方案的人都可以使用吗?我对各种想法持开放态度。
编辑:
DBMS:
Microsoft SQL Server Management Studio 2012 11.0.2100.60
答案 0 :(得分:0)
我现在找到了一种方法,它不是百分之百的傻瓜证明,因为它并不总是稳定的(例如,它在我第一次打开文件时从不工作,但每次都在以后)。
为我做的方式: 在数据库中创建一个全局临时表,消除了连接命令文本中的限制。
为此,我更改了数据透视表的命令文本:
Button
插入行的查询仍然以相同的方式完成,但仅适用于全局临时表并在VBA中执行。
SET NOCOUNT ON
CREATE TABLE #temptable
(KonPos integer, KonStk integer);
DECLARE @sqlCommand nvarchar(1000);
INSERT INTO #temptable (KonPos, KonStk)
SELECT * FROM ##GlobalTempTable;
SET @sqlCommand = 'DROP TABLE ##GlobalTempTable';
SELECT
a.*,
b.*
FROM
#temptable a LEFT JOIN dbTable b ON a.KonPos = b.Position
DROP TABLE #temptable;
EXEC (@sqlCommand);
现在就这样做了: