USP_CREDITCARDID_ISINUSE
Determines if a credit card ID is in use.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CREDITCARDID | uniqueidentifier | IN | |
@RECORDTOEXCLUDE | nvarchar(max) | IN | |
@ISINUSE | bit | INOUT |
Definition
Copy
create procedure dbo.USP_CREDITCARDID_ISINUSE
(
@CREDITCARDID uniqueidentifier,
@RECORDTOEXCLUDE nvarchar(max),
@ISINUSE bit output
)
with execute as owner
as
set nocount on
declare @CREDITCARDTABLES table
(
SEQUENCE int identity(1, 1),
TABLENAME nvarchar(128),
COLUMNNAME nvarchar(128)
)
-- Pull a list of all columns that reference the credit card table
insert into @CREDITCARDTABLES (TABLENAME, COLUMNNAME)
select
object_name(sys.foreign_keys.parent_object_id) as TABLENAME,
col_name(sys.foreign_keys.parent_object_id, sys.foreign_key_columns.parent_column_id) as COLUMNNAME
from sys.foreign_keys
inner join
sys.foreign_key_columns on sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.object_id
where
sys.foreign_keys.referenced_object_id = object_id('dbo.CREDITCARD')
declare @PREVIOUSSEQUENCE int
set @PREVIOUSSEQUENCE = 0
set @ISINUSE = 0
while @ISINUSE = 0
begin
declare @TABLENAME nvarchar(128), @COLUMNNAME nvarchar(128)
set @TABLENAME = null
set @COLUMNNAME = null
select top 1
@PREVIOUSSEQUENCE = SEQUENCE,
@TABLENAME = TABLENAME,
@COLUMNNAME = COLUMNNAME
from @CREDITCARDTABLES
where SEQUENCE > @PREVIOUSSEQUENCE
order by SEQUENCE
if @TABLENAME is null
break
-- Determine if any of the tables that link to the credit card table
-- contain credit being checked
declare @SQLTOEXEC nvarchar(max)
set @SQLTOEXEC = ' select top 1 @FOUNDID = BASETABLE.ID from ' + @TABLENAME + ' as BASETABLE
where BASETABLE.' + @COLUMNNAME + ' = @CREDITCARDID '
if @RECORDTOEXCLUDE is not null
set @SQLTOEXEC = @SQLTOEXEC + ' and BASETABLE.ID <> @RECORDTOEXCLUDE'
declare @FOUNDID uniqueidentifier
exec sp_executesql @SQLTOEXEC,
N'@CREDITCARDID uniqueidentifier, @RECORDTOEXCLUDE nvarchar(max), @FOUNDID uniqueidentifier output',
@CREDITCARDID = @CREDITCARDID, @RECORDTOEXCLUDE = @RECORDTOEXCLUDE, @FOUNDID = @FOUNDID output
if @FOUNDID is not null
set @ISINUSE = 1
end