【发布时间】:2016-07-08 11:28:06
【问题描述】:
所以我已经阅读了这些帖子
我想出了这个解决方案
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
alter procedure [CP24SHOP].[spSearch_DitoNr_OemNr_EngineType]
@user nvarchar(255),
@ditoNr int,
@oemNr nvarchar(255) = null,
@engineType nvarchar(255) = null
as
begin
if(@oemNr is null and @engineType is null)
exec CP24SHOP.spSearchDitoNr
@user = @user,
@ditoNr = @ditoNr
else
begin
declare @sql nvarchar(max) = 'SELECT *
FROM OPENROWSET(
''SQLNCLI'',
''Server=localhost\ISTABGLOBAL;Trusted_Connection=yes;'',
''exec CP24SHOP.spSearchDitoNr
@user = ' + @user + ',
@ditoNr = ' + @ditoNr + ''')'
--exec (@sql)
SELECT * INTO #TempTable FROM (@sql) -- Line 33
where OEMNumber = @oemNr
end
end
return 0;
但是在运行此脚本时,我收到以下错误:
消息 102,级别 15,状态 1,过程 spSearch_DitoNr_OemNr_EngineType,第 33 行
')' 附近的语法不正确。
任何关于我的语法有什么问题的想法对我来说都是新领域
编辑
我想做的是调用存储过程CP24SHOP.spSearchDitoNr,然后只选择OEMNumber = @oemNr的那些行
【问题讨论】:
-
您应该识别错误消息中提到的第 33 行。在写作中,最后一个
SELECT完全没有意义,但注释掉的exec表明您理解这一点。 -
看起来你至少在
+@user附近缺少'- 所以我认为问题归结为你的@sql字符串没有正确构建以及Gordon 提到的@ 987654331@ -
如果您的
@user确实是一个 varchar,那么您在之前和之后都会错过一个' -
我尝试将 ´@user = ' +@user + ',´ 更改为 ´@user = ''' +@user + ''',´ 我仍然收到相同的错误消息
标签: sql-server tsql openrowset