【发布时间】:2016-04-05 10:35:39
【问题描述】:
我有一个名为MMSHO 的链接服务器连接。 Oracle 服务器中有一个参数化函数,我想通过OPENQUERY 发送存储代码,然后在 where 条件下过滤。 :
DECLARE
@OPENQUERY NVARCHAR (MAX),
@STOREID VARCHAR (2),
@ARTICLEID VARCHAR (10),
@SQL NVARCHAR (MAX)
SET @STOREID = 10;
SET @ARTICLEID = 245511;
SET @OPENQUERY = 'SELECT *
FROM OPENQUERY (MMSHO,
''SELECT MS000'
+ @STOREID
+ '77TRP.MW070K01.MW070P01_REKE@MS000'
+ @STOREID
+ '77TRP(ART_NR, VAR, GEBI_NR) AS ARTICLE_NNBP
FROM MS000'
+ @STOREID
+ '77TRP.MW_MA_VAR_GEBI_SNAP@MS000'
+ @STOREID
+ '77TRP
WHERE SUBSYS_ART_NR = '
+ @ARTICLEID
+ '''';
SET @SQL =
'SELECT STORE_NO,
SUBSYS_ART_NO,
ARTICLE_NO,
ARTICLE_DESC,
PUAR,
SUPPLIER_NO,
SORTEN_TEXT AS ARTICLE_VARIANT,
GEBI_NR,
BLOCK_CD,
PACKAGE_CONTENT AS CONTENT,
PACKAGE_TYPE AS CONTENT_TYPE,
VAT AS ARTICLE_VAT,'
+ CHAR (13)
+ '('
+ @OPENQUERY
+ ') AS ARTICLE_NNBP,
ARTICLE_NNSP,
STOCK_QTY AS ARTICLE_STOCK,
CASE WHEN DEPT_NO IS NULL THEN 0 ELSE DEPT_NO END DEPARTMENT
FROM ARTICLE
WHERE STORE_NO = 10 AND SUBSYS_ART_NO = 245511'
PRINT (@SQL)
当我使用EXEC (@SQL) 运行上述查询时,SQL Server 会抛出错误:
消息 156,第 15 级,状态 1,第 20 行
关键字“CASE”附近的语法不正确。消息 102,第 15 级,状态 1,第 20 行
“DEPARTMENT”附近的语法不正确。
我试图删除 OPENQUERY 和 FROM 关键字之间的行,但没有成功。我究竟做错了什么?你能帮帮我吗?
打印查询
SELECT STORE_NO,
SUBSYS_ART_NO,
ARTICLE_NO,
ARTICLE_DESC,
PUAR,
SUPPLIER_NO,
SORTEN_TEXT AS ARTICLE_VARIANT,
GEBI_NR,
BLOCK_CD,
PACKAGE_CONTENT AS CONTENT,
PACKAGE_TYPE AS CONTENT_TYPE,
VAT AS ARTICLE_VAT,
(SELECT *
FROM OPENQUERY (
MMSHO,
'SELECT MS0001077TRP.MW070K01.MW070P01_REKE@MS0001077TRP(ART_NR, VAR, GEBI_NR) AS ARTICLE_NNBP
FROM MS0001077TRP.MW_MA_VAR_GEBI_SNAP@MS0001077TRP
WHERE SUBSYS_ART_NR = 245511') AS ARTICLE_NNBP,
ARTICLE_NNSP,
STOCK_QTY AS ARTICLE_STOCK,
CASE WHEN DEPT_NO IS NULL THEN 0 ELSE DEPT_NO END DEPARTMENT
FROM ARTICLE
WHERE STORE_NO = 10 AND SUBSYS_ART_NO = 245511
【问题讨论】:
-
为什么在执行查询后选择单引号
-
亲爱的莫汉,我不明白,你的意思是什么?
-
在第二个查询中为什么 'SELECT MS0001077TRP.MW070K01' 显示在单引号中
-
因为 SQL Server 要用单引号括起来!
-
OPENQUERY子查询末尾的AS ARTICLE_NNBP之前似乎缺少右括号。
标签: sql sql-server database openquery