我执行我的存储过程时收到以下错误:
消息102,级别15,状态1,行
6'2011'附近的语法不正确.
(1排受影响)
这是存储过程:
ALTER PROCEDURE [dbo].[DeliveryFileNames]
AS
BEGIN
SET NOCOUNT ON;
declare @SQL nvarchar(4000)
Create Table #DelivTemp(
Style nvarchar(50),
Material nvarchar(50),
Filename nvarchar(100),
delivered_date date)
set @SQL=
N'insert into #DelivTemp
Select distinct Style,Material,filename
from OPENQUERY(GCS_PRODUCTION,
''SELECT LEFT(FILENAME,locate(''''_'''',FILENAME)-1)as Style,
substring_index(filename,''''_'''',2)as Material,filename,
delivered_date FROM view_delivery_log
where delivered_date > ''2011%'' order by Style '')'
exec (@SQL)
drop table dbo.DelivFN
Select * into dbo.DelivFN
from #DelivTemp
END
Run Code Online (Sandbox Code Playgroud)
我使用OpenQuery从SQL Server 2008 R2上的链接服务器更新SQL表.
我知道,下划线是一个真正的问题,但我已经试过的选项,包括过多\,%以及单,双引号.
无论我得到相同的结果.我可以独立于存储过程运行查询并获得正确的结果.格式化多次引用的文件名字段00000000_ABC4_A.png.我使用下划线来标识出于报告目的所需的文件名组件.
除了使用%其他人指出的日期比较的逻辑错误之外,您当前的问题是语法错误.
由于你有另一个动态sql语句中包含的动态sql语句...你需要双重转义所有单引号...你在大多数查询中都做了,除了以下行:
where delivered_date > ''2011%'' order by Style '')'
Run Code Online (Sandbox Code Playgroud)
适当逃脱,将是:
where delivered_date > ''''2011%'''' order by Style '')'
Run Code Online (Sandbox Code Playgroud)
这引出了一个问题......为什么要构建动态执行的字符串,而不是直接调用语句?