我在SQL Server 2005(Management Studio IDE)中使用以下T-SQL查询:
DECLARE @id int; DECLARE @countVal int; DECLARE @sql nvarchar(max); SET @id = 1000; SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = @id'; EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle
我不知道如何将输入参数@id传递给EXEC查询,并将计数结果传递给@countVal.我看到了一些Microsoft SQL服务器的例子:
EXEC (@sql, @id = @id)
我为Oracle尝试了这个,但是我收到了一条语句错误:
OLE DB provider "OraOLEDB.Oracle" for linked server "oracleServer" returned message "ORA-00936: missing expression"
Jim Counts.. 17
试试这个:
EXEC sp_executesql @sql, N'@id int', @id
更多信息在这篇伟大的文章:http://www.sommarskog.se/dynamic_sql.html
至于输出,你的SELECT需要看起来像这样:
SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id
我选择'id'而不是'*'来避免不必要的数据...
然后你的动态SQL应该是这样的:
EXEC sp_executesql @sql, N'@id int, @countVal int OUTPUT', @id, @countVal OUTPUT
此示例改编自上面链接的相同文章,在sp_executesql部分中.
至于您的Oracle错误,您需要找出sp_executesql发送给Oracle的确切SQL.如果Oracle中有分析器或查询日志,那可能会有所帮助.我对Oracle的经验有限,但这将是解决问题的下一个合乎逻辑的步骤.
试试这个:
EXEC sp_executesql @sql, N'@id int', @id
更多信息在这篇伟大的文章:http://www.sommarskog.se/dynamic_sql.html
至于输出,你的SELECT需要看起来像这样:
SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id
我选择'id'而不是'*'来避免不必要的数据...
然后你的动态SQL应该是这样的:
EXEC sp_executesql @sql, N'@id int, @countVal int OUTPUT', @id, @countVal OUTPUT
此示例改编自上面链接的相同文章,在sp_executesql部分中.
至于您的Oracle错误,您需要找出sp_executesql发送给Oracle的确切SQL.如果Oracle中有分析器或查询日志,那可能会有所帮助.我对Oracle的经验有限,但这将是解决问题的下一个合乎逻辑的步骤.