Dav*_*.ca 6 sql-server oracle sql-server-2005 ora-00936
我在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
Run Code Online (Sandbox Code Playgroud)
我不知道如何将输入参数@id传递给EXEC查询,并将计数结果传递给@countVal.我看到了一些Microsoft SQL服务器的例子:
EXEC (@sql, @id = @id)
Run Code Online (Sandbox Code Playgroud)
我为Oracle尝试了这个,但是我收到了一条语句错误:
OLE DB provider "OraOLEDB.Oracle" for linked server "oracleServer"
returned message "ORA-00936: missing expression"
Run Code Online (Sandbox Code Playgroud)
Jim*_*nts 17
试试这个:
EXEC sp_executesql @sql, N'@id int', @id
Run Code Online (Sandbox Code Playgroud)
更多信息在这篇伟大的文章:http://www.sommarskog.se/dynamic_sql.html
至于输出,你的SELECT需要看起来像这样:
SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id
Run Code Online (Sandbox Code Playgroud)
我选择'id'而不是'*'来避免不必要的数据...
然后你的动态SQL应该是这样的:
EXEC sp_executesql @sql,
N'@id int, @countVal int OUTPUT',
@id,
@countVal OUTPUT
Run Code Online (Sandbox Code Playgroud)
此示例改编自上面链接的相同文章,在sp_executesql部分中.
至于您的Oracle错误,您需要找出sp_executesql发送给Oracle的确切SQL.如果Oracle中有分析器或查询日志,那可能会有所帮助.我对Oracle的经验有限,但这将是解决问题的下一个合乎逻辑的步骤.
| 归档时间: |
|
| 查看次数: |
52810 次 |
| 最近记录: |