【发布时间】:2010-12-19 16:46:58
【问题描述】:
我创建了一个用户定义函数,它根据另一个表中的某些值返回 WHERE 语句。
WHERE dbo.tblGeneralLedgerEntry.accountID = 1210
然后我使用存储过程来构造和执行SELECT语句:
SELECT dbo.tblGeneralLedgerEntry.*, dbo.tblJournalAccountHead.description As header
FROM dbo.tblGeneralLedgerEntry
INNER JOIN dbo.tblJournalAccountHead ON dbo.tblGeneralLedgerEntry.documentReference = dbo.tblJournalAccountHead.documentReference
WHERE dbo.tblGeneralLedgerEntry.accountID = 1210
一切都运行成功,但我得到的结果是空的。当我只执行语句而不使用函数时,我会得到结果,所以我知道这不是问题。
存储过程(@reportID = 10000)
DECLARE @sql_select nvarchar(1000)
IF (@reportID = 10000) BEGIN
SET @sql_select =
'SELECT dbo.tblGeneralLedgerEntry.*, dbo.tblJournalAccountHead.description As header ' +
'FROM dbo.tblGeneralLedgerEntry ' +
'INNER JOIN dbo.tblJournalAccountHead ON dbo.tblGeneralLedgerEntry.documentReference = dbo.tblJournalAccountHead.documentReference '
END
DECLARE @sql nvarchar(4000) = @sql_select + dbo.reportWhere(@reportID)
EXEC ( @sql )
在 ADP 中将 MS-SQL 与 Access 2010 结合使用。
我做错了什么?
谢谢!
编辑
它不起作用的原因显然是因为它不应该:
用户定义函数中的动态 SQL
这很简单:您不能从用 T-SQL 编写的使用定义函数中使用动态 SQL。这是因为不允许您在 UDF 中执行任何可能更改数据库状态的操作(因为 UDF 可能作为查询的一部分被调用)。由于您可以从动态 SQL 中执行任何操作,包括更新,因此很明显为什么不允许使用动态 SQL。
【问题讨论】:
标签: tsql user-defined-functions