有没有一种方法可以将数据库中的所有表名作为SP的参数传递?

时间:2019-03-19 17:36:03

标签: sql sql-server tsql stored-procedures parameter-passing

我正在为MS SQL SERVER中数据库中所有表的所有列跨列运行验证脚本。我的查询现在是这样的:

CREATE PROCEDURE [dbo].[DDS1718_Validation] 
AS
BEGIN

SET FMTONLY OFF

DECLARE @ActualTableName AS NVarchar(255)

SELECT @ActualTableName =QUOTENAME(TABLE_NAME )
FROM INFORMATION_SCHEMA.TABLES

但是,这仅选择一张表的输出。 谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用表值参数。在调用Sp之前,用所有表名填充表值参数,然后调用sp并传递参数,就像传递int或float参数一样。

更多信息:https://docs.microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine?view=sql-server-2017

答案 1 :(得分:0)

DECLARE @ActualTableName AS varchar(max)

SELECT @ActualTableName = COALESCE(@ActualTableName + ',', '') + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES

SELECT @ActualTableName

现在您有了所有表名,请在您的存储过程中发送此@ActualTableName。 在存储过程中,您可以使用','拆分此表名。

split string in sql