2014-01-07 35 views
1

我想验证一个链接服务器上存在的工作号码,并获取一个变量(@JobExists),指出它是否与否(1代表是,0代表否)。如何在sp_executesql中使用OPENQUERY?

为此,我尝试使用OPENQUERY以及sp_executesql,因为我必须传入作业编号的参数。我已经尝试了下面的代码,但得到'ntext/nchar/nvarchar'类型的错误'Procedure expect Parameters'@statement'。出于测试目的,我声明并设置了变量@JobNumber。

DECLARE @JobNumber as varchar(50) 
SET @JobNumber = '2112111' 

DECLARE @JobExists as BIT 
DECLARE @JobCount as int 
DECLARE @ParmDefinition as varchar(100) 
DECLARE @sql as varchar(500) 

SET @JobExists = 0 
SET @ParmDefinition = N'@Result int output' 
SET @sql = 'SELECT @Result = SELECT COUNT(*) FROM OPENQUERY(MYLINKEDSVR,''SELECT JOB_NUMBER FROM PROD.tbl1 WHERE JOB_NUMBER = ''''' + UPPER(RTRIM(LTRIM(@JobNumber))) + ''''''')' 

exec sp_executesql @sql, @ParmDefinition, @Result = @JobCount output 

IF @JobCount > 0 
SET @JobExists = 1 

SELECT @JobExists 

我读过了sp_executesql的位置:http://technet.microsoft.com/en-us/library/ms188001.aspx 我也做不同的搜索,但跨为我工作的任何答案都没有来。

有什么我失踪了吗?

回答

1

错误消息很明显:您必须将@sql声明为nvarchar,而不是将其声明为varchar。 @ParamDefinition相同:

DECLARE @ParmDefinition as nvarchar(100) 
DECLARE @sql as nvarchar(500) 
+0

感谢您的信息。愚蠢的事情让我想念。我觉得我得到的地方,但现在得到的错误:关键字'SELECT'附近的语法不正确。 (1 row(s)affected) – sr28

+0

SELECT @Result = COUNT(*) –

+0

谢谢。另一个简单的错误道歉,我会去做另一杯咖啡! – sr28