【发布时间】:2020-07-31 14:31:48
【问题描述】:
我试图动态传递表名和列名,这是作为 SSIS 进程的一部分,我正在下面尝试这个存储过程。
CREATE PROCEDURE [lnd].[Get_ANCNotullColumn]
(@PassedTableName AS NVarchar(255),
@PassedColumnName AS NVARCHAR(100))
AS
BEGIN
DECLARE @ActualTableName AS NVarchar(255)
SELECT @ActualTableName = QUOTENAME( TABLE_NAME )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @PassedTableName
DECLARE @sql AS NVARCHAR(MAX)
SELECT @sql = 'SELECT COUNT(*) FROM ' + @ActualTableName + ';'
DECLARE @final AS NVARCHAR(MAX)
SELECT @final = @sql + 'WHERE ' + @PassedColumnName + ' IS NULL OR ' + @PassedColumnName + '='''
EXEC(@SQL)
END
执行此操作时,我没有得到计数结果,而是执行成功。
EXEC [lnd].[Get_ANCNotullColumn] 'lnd.ANC_LND_ItemOverride', 'comments'
我需要将计数作为输出。
另外我的简单直接查询是这样的
SELECT COUNT(*)
FROM lnd.ANC_LND_ItemOverride
WHERE Comments IS NULL OR Comments = '' -- 3 is the output
【问题讨论】:
-
这是 SQL Server 吗?
-
@LajosArpad 是的
-
我已经很长时间没有使用 SQL Server 了,所以与其写答案,不如开始聊聊这个问题。您可以创建一个存储函数而不是一个过程,声明一个计数变量,选择 count(*) 到计数并返回结果。或者,您可以将其保留为存储过程并具有一个输出参数并选择该输出参数。
标签: sql stored-procedures dynamic