用户定义函数的“Expression”参数数据类型

时间:2011-10-04 20:03:33

标签: sql-server tsql

我正在尝试创建一个函数,该函数将expression作为参数,与BINARY_CHECKSUM一样。具体来说,我希望我的参数是1到N列名称的列表。当我在SQL Server Management Studio的对象资源管理器中查看BINARY_CHECKSUM(或MAX或CHECKSUM)的定义时,参数被定义为'Expression(any type)' - 用户定义的函数可以模拟这个吗?我知道我可以使用参数作为逗号名称的分隔列表,但我对'表达式(任何类型)'感到好奇。

2 个答案:

答案 0 :(得分:0)

你可以这样试试:

declare @cmd varchar(max)
declare @columns varchar(max), @table_name sysname

set @table_name = 'sys.objects'
set @columns = '*'

set @cmd = 'select top 1 binary_checksum('+@columns+') as column_name from '+@table_name
print @cmd
exec (@cmd)

答案 1 :(得分:0)

如果要在SQL Server 2005或更高版本中编写自己的聚合函数(如BINARY_CHECKSUMCOUNT等),则必须使用CLR。请参阅MSDN上的以下内容:

How to: Create and Run a CLR SQL Server Aggregate
CREATE AGGREGATE