【发布时间】:2014-11-05 17:33:30
【问题描述】:
我有这个用户定义的函数:
CREATE FUNCTION [dbo].[COUNT_ROWS_TABLE]()
RETURNS TINYINT
AS
BEGIN
DECLARE @ROW_COUNT TINYINT
SELECT @ROW_COUNT = COUNT(*) FROM EMPLOYEE
RETURN @ROW_COUNT
END
GO
问题是它只适用于表[dbo].[EMPLOYEE],我不想为我数据库上的每个表复制粘贴这个函数。
到目前为止我的尝试:
CREATE FUNCTION [dbo].[COUNT_ROWS_TABLE](@TABLE_NAME VARCHAR(50))
RETURNS TINYINT
AS
BEGIN
DECLARE @SQL_COMMAND NVARCHAR(100)
DECLARE @PARAM NVARCHAR(50)
DECLARE @ROW_COUNT TINYINT
SET @SQL_COMMAND = N'SELECT @RESULT = COUNT(*) FROM ' + @TABLE_NAME
SET @PARAM = N'@RESULT TINYINT OUTPUT'
EXEC SP_EXECUTESQL @SQL_COMMAND, @PARAM, @RESULT = @ROW_COUNT OUTPUT
RETURN @ROW_COUNT
END
GO
该代码不起作用,因为它不允许在函数中使用这些语句。
不过,它在存储过程中工作,但前提是我 PRINT 变量而不是 RETURN 它。
我需要它是一个函数,因为我需要在 IF 语句上调用它。
关于如何实现这一目标的任何想法?谢谢。
【问题讨论】:
-
小音?所以你的表都不会包含超过 255 行?!?
-
@Philip Kelley 是的,因为它仅供个人使用(无论如何它是一个小型数据库)。我所有的桌子大约有 100-200 行...... 230 行顶部。所以,我不想在这种情况下使用不必要的(和更大的)类型。谢谢你的建议。
标签: sql sql-server function dynamic