我想有这样的查询
SELECT
param1,
param2,
param3,
getHidden(param1, param3)
FROM xxx
我的函数必须构建动态查询,执行它并返回0或1。
CREATE FUNCTION getHidden (@param1 VARCHAR(50), @param2 INT) RETURNS INT AS
BEGIN
DECLARE @firstSelect VARCHAR(200);
DECLARE @query VARCHAR(1000);
SELECT @firstSelect = restriction FROM xxxx WHERE param1 = @param1 AND param2
SET @query = 'SELECT (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END) FROM xxx WHERE ' + @firstSelect;
-- EXEC @query?
RETURN 1
END
我在动态查询执行中遇阻,是否有解决此问题的解决方法?
THX, 杰里米
编辑:详情 在jasper ireport中,我必须进行查询(只有一个),该查询应该能够返回并显示问题列表。 在数据库中,每行都有一个问题,可能有一个限制字段。该字段包含WHERE约束(内容示例:BEIE_Emp_Nb = 0) 在我的php程序中,我使用此字段来构建我的查询。我的最终查询将是:
SELECT param1, param2 FROM questions WHERE 1 = 1 AND $constraint
这给了我
SELECT param1, param2 FROM questions WHERE 1 = 1 AND BEIE_Emp_Nb = 0
我不知道这是否足够清楚。问题在于我必须查询约束字段以查找实际问题,然后构建我的查询并返回结果。
答案 0 :(得分:1)
您无法在SQL Server函数中调用存储过程,如sp_executesql
。
这意味着您无法在函数内定义和执行动态SQL代码。
原因是函数不允许有副作用(比如调用自己和更改数据或参数,因为您正在使用动态SQL查询,并执行类似INSERT,DELETE的操作)或更新)。
只有存储过程可以调用函数,而不是相反。检查here功能的限制和限制。 然后,您应该创建一个存储过程而不是函数来解决您的问题。
答案 1 :(得分:0)
要执行动态查询,请将EXEC
与输出变量一起使用。
DECLARE @nResult INT
EXEC sp_executesql @query, N'@nResultNew INTEGER OUTPUT', @nResult OUTPUT
RETURN @nResult