sql - 消息 102,级别 15,状态 1,第 24 行 '.' 附近语法错误

标签 sql sql-server-2008

所有...基于我最近在这里发布的另一个问题,我构建了这个存储过程,但是在执行时,我收到标题中的错误。

如您所见,我尝试删除任何别名,但这并不重要。也不知道如何使用 PRINT 来查看此问题。当然,独立的SELECT 语句可以独立工作。

出现错误后,我什至可以从临时表中提取结果。那么到底是脚本有问题还是结果有问题呢?感谢您的帮助。我也只使用了WHERE语句来限制测试结果。

    ALTER PROC ap_vhdr_test AS
SET NOCOUNT ON
IF OBJECT_ID('temp.dbo.#ap_vend_det') is NOT NULL
DROP TABLE #ap_vend_det;

CREATE TABLE #ap_vend_det           
(db_name varchar(32)
, vendor_name varchar(40)
, vendor_code varchar(12)
, voucher_no varchar(16)
, invoice_num varchar(16)
, inv_date varchar(16)
, due_date varchar(16)
, apply_date varchar(16)
, total float
, line_desc varchar(40)
, company_id smallint
, gl_num varchar(32)
, acct_site varchar(32)
, sort_code varchar(32)
, nat_gl varchar(32)
, gl_desc varchar(40)
, category nvarchar(510)
, sub_category nvarchar(510)
, po_num varchar(16)
, vendor_class varchar(8)
)
INSERT INTO #ap_vend_det
EXEC sp_MSforeachdb N'IF ''?'' NOT IN ( ''model'',''tempdb'',''master'',''msdb'')
BEGIN SELECT DISTINCT db_name = ''?''
, amaster.addr1 --as vendor_name
, amaster.vendor_code --as vendor_code
, apdet.trx_ctrl_num --as voucher_no
, aphdr.doc_ctrl_num --as invoice_num
, CONVERT(varchar(16),dateadd(dd,(aphdr.date_doc - 639906),''1/1/1753''),101) --as inv_date 
, CONVERT(varchar(16),dateadd(dd,(aphdr.date_due - 639906),''1/1/1753''),101) --as due_date
, CONVERT(varchar(16),dateadd(dd,(aphdr.date_applied - 639906),''1/1/1753''),101) --as apply_date
, aphdr.amt_net --as total
, aphdr.doc_desc --as line_desc
, gldet.company_id --as company_id
, gldet.account_code --as gl_num
, gldet.seg2_code --as acct_site
, gldet.seg3_code --as sort_code
, gldet.seg1_code --as nat_gl
, gldet.description --as gl_desc
, ap_coa.group_header --as category
, ap_coa.group_label  --as sub_category
, apdet.po_ctrl_num --as po_num
, apvend.vend_class_code --as vendor_class
FROM ?.dbo.amaster --amaster
JOIN ?.dbo.aphdr --aphdr                        --**
    ON amaster.vendor_code = aphdr.vendor_code
    AND amaster.pay_to_code = aphdr.pay_to_code
JOIN ?.dbo.apdet --apdet
    ON aphdr.trx_ctrl_num = apdet.trx_ctrl_num
JOIN ?.dbo.gldet --gldet
    ON aphdr.journal_ctrl_num = gldet.journal_ctrl_num
JOIN ?.dbo.glt --glt
    ON gldet.journal_ctrl_num = glt.journal_ctrl_num
JOIN ?.dbo.apvend --apvend
    ON amaster.vendor_code = apvend.vendor_code
JOIN reps.dbo.ap_coa --ap_coa
    ON gldet.seg1_code = ap_coa.acct_code
WHERE aphdr.date_applied >= ''734785''              
END';

SELECT * FROM #ap_vend_det;

最佳答案

如果数据库名称中包含空格或其他字符,此操作将会失败。您需要将它们括在方括号中,例如

FROM [?].dbo.amaster --amaster

不仅如此,由于您使用了 3 个部分名称,因此还需要为 FROM 子句中的表命名。

FROM [?].dbo.amaster amaster
JOIN [?].dbo.aphdr aphdr                        --**
    ON amaster.vendor_code = aphdr.vendor_code
    AND amaster.pay_to_code = aphdr.pay_to_code
JOIN [?].dbo.apdet apdet
    ON aphdr.trx_ctrl_num = apdet.trx_ctrl_num
JOIN [?].dbo.gldet gldet
    ON aphdr.journal_ctrl_num = gldet.journal_ctrl_num
JOIN [?].dbo.glt glt
    ON gldet.journal_ctrl_num = glt.journal_ctrl_num
JOIN [?].dbo.apvend apvend
    ON amaster.vendor_code = apvend.vendor_code
JOIN reps.dbo.ap_coa ap_coa
    ON gldet.seg1_code = ap_coa.acct_code
WHERE aphdr.date_applied >= ''734785''     

关于sql - 消息 102,级别 15,状态 1,第 24 行 '.' 附近语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057176/

相关文章:

php - 将一列中的页面分组

sql - 在 SQL Server 的更新语句中使用随机记录更新表?

mysql - 在不影响MySQL中的外键的情况下用另一张表替换一个空表

sql - 对于制表符分隔的文本,PostgreSQL 中的 string_to_array 命令应该使用什么定界符?

sql - 日期时间列之间的查询

sql-server - 如何在 SQL Server 中使用 SMO 自动生成脚本?

java - ORDER BY 在 JPQL 查询中不起作用

sql-server - 是地理半径内的一个点-SQL Server 2008

sql-server - SQL Server 和中间物化?

sql-server - 如何以有效的方式覆盖数据库中的重复数据?