【发布时间】:2017-07-28 18:47:26
【问题描述】:
SQL 新手。我正在尝试通过 excel VBA 通过查询字符串执行 SQL 代码,以测试来自存储在同一工作簿工作表中的表的动态数据透视查询。正常查询工作正常(SELECT),但 SQL 语句不能。
我一次又一次收到Invalid SQL statement expected; 'DELETE','INSERT'...错误
我想要实现的是一个 sql 查询来检索动态数据透视(行到变量列)。我不想通过数据透视表来实现这一点,我想通过 VBA 的 SQL 字符串查询来实现。
如何做到这一点?
On Error GoTo ErrorConexion
objAdoConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.path & "\" & ThisWorkbook.Name & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;FMT=Delimited; IMEX=1;"""
strSQL = "SET NOCOUNT ON " & Chr(13) _
& "CREATE TABLE #tempdata(tmpf1 date, tmpf2 int)" _
& " INSERT INTO #tempdata(tmpf1,tmpf2)" _
& " SELECT [DATE], [AMOUNT] FROM " & GetTableRange(StrTable)
On Error GoTo ErrorSQL
objAdoRS.Open strSQL, objAdoConn
我想执行这样的代码:
DECLARE @Category AS VARCHAR(MAX)
SELECT @Category =
COALESCE(@Category + ', ', '') + CAST(Category AS VARCHAR(20))
FROM (SELECT DISTINCT Category FROM mytable) Books
DECLARE @DynamicPIVOT AS VARCHAR(MAX)
SELECT @DynamicPIVOT = 'SELECT ' + @Category +
' FROM (
SELECT amount, Category FROM mytable
) Books
PIVOT (
MAX(amount) FOR Category IN (' + @Category + ')
) Result;'
EXEC (@DynamicPIVOT)
问候, 文斯。
【问题讨论】:
-
您正在尝试使用 Jet/ACE(两种不同的 SQL 引擎和方言)复制 SQL Server 存储过程(一个复杂的动态数据透视表)。此外,您不能像在存储过程中那样使用 ADO 在一次调用中发送多个 SQL 命令。请向我们展示数据和所需的输出。
-
谢谢 Parfait,我正在融入很多环境。我添加了示例数据。