当前位置: 首页 > 面试题库 >

在函数(SQL Server)中执行动态sql时出现错误?

全弘深
2023-03-14
问题内容

我创建一个函数来执行动态SQL并返回一个值。我得到“只能从函数内执行函数和某些扩展存储过程”。作为错误。

功能:

Create Function fn_GetPrePopValue(@paramterValue nvarchar(100))
returns int as
begin
declare @value nvarchar(500);

Set @SQLString  = 'Select Grant_Nr From Grant_Master where grant_id=' + @paramterValue

exec   sp_executesql
       @query = @SQLString,       
       @value = @value output

return @value   
end

执行:

Select dbo.fn_GetPrePopValue('10002618') from Questions Where QuestionID=114

和:

Select fn_GetPrePopValue('10002618') from Questions Where QuestionID=114

该函数是否被正确调用或该函数不正确?


问题答案:

您不能通过函数使用动态SQL,也不能调用存储过程。

Create proc GetPrePopValue(@paramterValue nvarchar(100))
as
begin
declare @value nvarchar(500),
        @SQLString nvarchar(4000)

Set @SQLString = 'Select @value = Grant_Nr From Grant_Master where grant_id = @paramterValue'

exec sp_executesql @SQLString, N'@paramterValue nvarchar(100)', 
       @paramterValue, 
       @value = @value output

return @value   
end


 类似资料:
  • 问题内容: 有什么方法可以将动态生成的SQL提交给Teradata?我编写了一个查询,该查询将创建用于对表进行非规范化的代码。现在,我将代码放到客户端(SAS)中,然后在第二步中重新提交。我对Teradata宏或过程不熟悉;这样的事情行得通吗? 为了说明这一点,我有一个定义如下的表: 该表每天()填充一次,用于监视另一个表中对email_date的更改。以下查询返回我可以运行以创建我的非规范化视图

  • 18/04/25 11:58:34 INFO sparkcontext:Created broadcast 0 from Traceback(最近的调用为last):文件“/users/xxxxx/scripts/hive/hive.py”,第12行,在spark.sql(“select*from pokes”).show()文件“/usr/local/cellar/apache-spark/2.

  • 我正在尝试使用SQLite数据库在android中本地存储电子邮件。当我第一次调用,该数据库尚不存在,已创建。我在create语句中遇到语法错误。。。我的代码看起来像这样。。。 我不熟悉SQLite语法,我一直在寻找导致这种情况的原因,但没有任何结果。知道是什么引起的吗?数据库确实是本地存储此类数据的最佳方式。 准确的错误如下所示。。

  • 问题内容: 这是代码 错误回溯为: 似乎struct.unpack方法将’\ xff '解析为255并分配给,无论传递的非null字符集参数如何。 这是MySQL版本问题吗?(版本) 问题答案: 可以参考 拉取请求591