我正在尝试执行动态计数功能,在这里我传递表名和列名以及计数条件的列名:这是我所拥有的,但我得到并且错误尝试创建:
USE [testdb1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION [dbo].[ItemCount](
@TableName [varchar](255),
@PKIDName [varchar](255),
@IDValue Integer,
@ColumnName [varchar](255),
@ColumnValue [varchar](255)
)
RETURNS [varchar](100) AS
BEGIN
DECLARE @Result integer
select @Result =count(*)
from @TableName where @PKIDName = @IDValue and @ColumnName = @ColumnValue
RETURN @Result
END
如果可能的话,还希望能够通过比较运算符(例如,在上面的示例中),例如<>或>。
由于
答案 0 :(得分:0)
我认为这更适合存储过程。在SET @SQLStatement中,您还可以更新" ="变量并通过新变量更新比较运算符。注意@IDValue设置为varchar用于连接,因此您必须在其周围加上引号(即' 1')。但是,当脚本执行时,字符串将读取它是一个整数。
CREATE PROCEDURE dbo.ItemCount
(
@TableName [varchar](255),
@PKIDName [varchar](255),
@IDValue [varchar](255),
@ColumnName [varchar](255),
@ColumnValue [varchar](255)
)
AS
BEGIN
DECLARE @SQLStatment VARCHAR(MAX);
SET @SQLStatment = 'SELECT COUNT(*) [RowCount] FROM ' + @TableName + ' WHERE ' + @PKIDName + ' = ' + @IDValue + ' AND ' + @ColumnName + ' = ' + CHAR(39) + @ColumnValue + CHAR(39);
EXECUTE(@SQLStatment)
END
如果您不熟悉存储过程,可以按如下方式运行您的过程,只需插入适当的值。
EXEC dbo.ItemCount @TableName, @PKIDName, @IDValue, @ColumnName, @ColumnValue;