将存储过程转换为内联函数

时间:2018-01-18 08:43:11

标签: sql-server tsql stored-procedures inline-functions

我需要执行更新但是使用存储过程我不能使用它。所以我没有选择然后转换为功能。 这是我的存储过程。

alter Proc spIsUnique
@columnname nvarchar(max),
@tablename nvarchar(max)
As
Begin
EXEC ('select IIf (count(*)>1,''False'',''True'') as [IsUnique-check] 
        from '+@tablename+' 
        group by '+@columnname)
End

我尝试将其转换为内联函数

create Function fn_IsUnique(
@columnname nvarchar(max),
@tablename nvarchar(max)
) returns table
As
return
select IIf (count(*)>1,'False','True') as [IsUnique-check] 
        from @tablename
        group by @columnname

它抛出了我的错误

Must declare the table variable "@tablename

帮我将评分过程转换为内联函数。 编辑: - 如果无法转换为内联函数。 任何替代方法如何将此存储过程的结果用于更新语句。

1 个答案:

答案 0 :(得分:0)

试试这个

CREATE FUNCTION dbo.FnRetCnt
(
    @tablename nvarchar(max)
)
RETURNS BIT
AS
BEGIN

    DECLARE @Ret BIT

    DECLARE @t TABLE
    (
       Cnt INT
    )

    INSERT INTO @t
    SELECT
       SUM(st.row_count)
       FROM
         sys.dm_db_partition_stats st
       WHERE
          object_id = OBJECT_ID(@tablename)

    IF EXISTS(SELECT 1 FROM @t WHERE Cnt>0)
       SET @Ret = 0
    ELSE
       SET @Ret = 1

    RETURN @Ret

END
go

SELECT
    dbo.FnRetCnt('AddressType')