你如何在sp_executesql中使用OPENQUERY?

时间:2014-01-07 09:30:44

标签: sql-server tsql stored-procedures openquery sp-executesql

我正在尝试验证链接服务器上是否存在作业编号并获取一个变量(@JobExists),指示它是否存在(1表示是,0表示否)。

要做到这一点,我正在尝试使用OPENQUERY和sp_executesql,因为我必须传入作业号的参数。我已经尝试了下面的代码,但是得到错误'Procedure expect'参数'@statement'类型'ntext / nchar / nvarchar'。出于测试目的,我已声明并设置变量@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 个答案:

答案 0 :(得分:1)

错误消息很明确:您必须将@sql声明为nvarchar而不是varchar。 @ParamDefinition也一样:

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