动态计数功能SQL Server 2012

时间:2016-06-14 16:17:16

标签: sql sql-server

我正在尝试执行动态计数功能,在这里我传递表名和列名以及计数条件的列名:这是我所拥有的,但我得到并且错误尝试创建:

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

如果可能的话,还希望能够通过比较运算符(例如,在上面的示例中),例如<>或>。

由于

1 个答案:

答案 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;