【问题标题】:How do you use OPENQUERY within sp_executesql?如何在 sp_executesql 中使用 OPENQUERY?
【发布时间】:2014-01-07 09:30:44
【问题描述】:

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

为此,我尝试将 OPENQUERY 与 sp_executesql 一起使用,因为我必须传入作业编号的参数。我已经尝试了下面的代码,但得到了错误“程序需要'ntext/nchar/nvarchar'类型的参数'@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 我也进行了各种搜索,但没有找到任何适合我的答案。

我有什么遗漏吗?

【问题讨论】:

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


    【解决方案1】:

    错误信息很明确:您必须将@sql 声明为nvarchar 而不是varchar。 @ParamDefinition 也是如此:

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

    【讨论】:

    • 感谢您的信息。愚蠢的事情让我想念。我觉得我到了某个地方,但现在出现错误:关键字“SELECT”附近的语法不正确。 (1 行受影响)
    • SELECT @Result = COUNT(*)
    • 谢谢。另一个简单的错误。抱歉,我再去煮一杯咖啡!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2017-05-01
    相关资源
    最近更新 更多