Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server表值函数?布拉格自治事务_Sql Server_Oracle_Transactions_Pragma - Fatal编程技术网

Sql server SQL Server表值函数?布拉格自治事务

Sql server SQL Server表值函数?布拉格自治事务,sql-server,oracle,transactions,pragma,Sql Server,Oracle,Transactions,Pragma,我们有一些第三方软件,使用ODBC从Oracle数据库中选择数据 在Oracle中,我们将数据作为流水线函数(而不是表或视图)公开,因为我们希望审核选择。Oracle pipelined函数使用PRAGMA autonomy_TRANSACTION开关,以便我们可以为每一行将一行写入审核表,并将其返回到ODBC Select 这真是太棒了!但我们现在需要从SQL Server而不是Oracle执行同样的操作 我原以为我们可以用SQL Server表值函数代替Oracle的流水线函数来实现这一点,

我们有一些第三方软件,使用ODBC从Oracle数据库中选择数据

在Oracle中,我们将数据作为流水线函数(而不是表或视图)公开,因为我们希望审核
选择
。Oracle pipelined函数使用
PRAGMA autonomy_TRANSACTION
开关,以便我们可以为每一行将一行写入审核表,并将其返回到ODBC Select

这真是太棒了!但我们现在需要从SQL Server而不是Oracle执行同样的操作

我原以为我们可以用SQL Server表值函数代替Oracle的流水线函数来实现这一点,但我们遇到了“你不应该在函数中执行DML”定律

我们已经用一个过程尝试过了,但是第三方软件不会有它——当我告诉它“EXEC”时,它就失败了


SQL Server中是否有一个
PRAGMA自治\u事务
等价物?或者对于我想做的事情还有其他选择吗?

在函数中调用master..xp\u cmdshell有一个解决方案


您能否在问题中添加MS SQL server版本?
CREATE FUNCTION loophole(@i int) RETURNS varchar(20) AS
  BEGIN
     DECLARE @sql varchar(MAX),
             @cmd varchar(4000)
     SELECT @sql = ' UPDATE rsci ' +
                   ' SET b = CASE ' + ltrim(str(@i + 1)) +
                   ' WHEN 1 THEN ''Ett'' WHEN 2 THEN ''Två''' +
                   ' WHEN 3 THEN ''Tre'' WHEN 4 THEN ''Fyra''' +
                   ' WHEN 5 THEN ''Fem'' WHEN 6 THEN ''Sex''' +
                   ' WHEN 7 THEN ''Sju'' WHEN 8 THEN ''Åtta''' +
                   ' WHEN 9 THEN ''Nio'' WHEN 10 THEN ''Tio'' END' +
                   ' WHERE a = ' + ltrim(str(@i + 1))
     SELECT @cmd = 'sqlcmd -S ' + @@servername + ' -d ' + db_name() +
                   ' -Q "' + @sql + '"'
     EXEC master..xp_cmdshell @cmd, 'no_output'
     RETURN (SELECT b FROM rsci WHERE a = @i)
  END