【问题标题】:Error executing dynamic sql query in phpmyadmin(error : #1046)在 phpmyadmin 中执行动态 sql 查询时出错(错误:#1046)
【发布时间】:2016-02-20 05:03:24
【问题描述】:

我试图在 PhpMyAdmin 中运行我的动态查询,但 mysql 显示如下:

错误:#1064 - 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'DECLARE @DynamicQuery AS nvarchar(max) DECLARE 附近使用的语法 @AgrColumns AS nvarchar(max)' 在第 1 行

这是我的查询:

DECLARE @DynamicQuery AS nvarchar(max)
DECLARE @AgrColumns AS nvarchar(max)

--Get distinct values of the Column 
SELECT @AgrColumns = ISNULL(@AgrColumns + ',', '') + 'SUM(CASE WHEN REASON_NAME = ''' + REASON_NAME + ''' THEN cnt ELSE 0 END) AS ' + QUOTENAME(REASON_NAME)
FROM (SELECT DISTINCT REASON_NAME FROM Reason) AS Reasons

--Prepare the query using the dynamic 
SET @DynamicQuery =
N'SELECT ' + @AgrColumns + ' FROM 
(
    SELECT r.REASON_NAME, SUM(CASE WHEN c.ID is null OR rg.ID IS NULL THEN 0 ELSE 1 END) AS cnt 
    FROM Reason r
    LEFT JOIN Chat c ON (c.REASON_ID = r.ID)
    LEFT JOIN Reason_Group rg ON (r.REASON_GROUP_ID = rg.ID)
    GROUP BY REASON_NAME
) inn'

--Execute the Dynamic Query
EXEC sp_executesql @DynamicQuery

第一桌聊天:

ID    REASON_ID    DEPARTMENT_ID    
 1      46           1
 2      46           1
 3      50           1
 4      50           2
 5      100          1 
 6      100          2

二表原因:

ID    REASON_NAME     REASON_GROUP_ID
46    Reason1         1
50    Reason2         1
100   Reason3         2
101   Reason4         2
105   Reqson5         3

第三张表 Reason_Group :

ID    NAME
1     Group1
2     Group2
3     Group3

我该如何解决这个问题? PhpMyAdmin 版本:4.2.11

【问题讨论】:

  • 分号。你需要分号。
  • 所有分号都是真的@Darwin von Corax
  • 您的代码中没有语句分隔符。您需要一个分号(或任何当前分隔符)来标记每个语句的结尾。

标签: mysql phpmyadmin dynamic-sql


【解决方案1】:

Declare 只能出现在构成复合语句块的begin ... end block 中。如果您不想使用存储程序,请使用带有set statement 的用户定义变量。

但是,你尝试执行的代码似乎是ms sql而不是mysql,所以你需要认真重写整个代码才能在mysql环境中运行。

【讨论】:

  • 如何将其转换为 mysql 查询? @shadow
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2012-11-18
相关资源
最近更新 更多