Sql 如何遍历已知表和未知列以获得每个SSN的最大日期?
我将创建一个函数来读取一个包含大约65个表的表,并查找包含日期的所有列,这些列大部分存储为int,有时存储为char或datetime。列名未知,但我假定以“%Date”结尾 我需要根据每个客户的SSN查找其最新日期。但是,SSN也被称为不同的名称,例如SSN、SSN\u Nr、SSN\u No等。我下面的代码完全错误:Sql 如何遍历已知表和未知列以获得每个SSN的最大日期?,sql,sql-server-2008,Sql,Sql Server 2008,我将创建一个函数来读取一个包含大约65个表的表,并查找包含日期的所有列,这些列大部分存储为int,有时存储为char或datetime。列名未知,但我假定以“%Date”结尾 我需要根据每个客户的SSN查找其最新日期。但是,SSN也被称为不同的名称,例如SSN、SSN\u Nr、SSN\u No等。我下面的代码完全错误: CREATE FUNCTION dbo.LastActivityDate (@SSN varchar(10)) RETURNS datetime AS BEGIN DECLAR
CREATE FUNCTION dbo.LastActivityDate (@SSN varchar(10))
RETURNS datetime
AS
BEGIN
DECLARE @Result datetime
DECLARE @SSN varchar(10)
DECLARE @tableSSN varchar(10)
DECLARE @table varchar(100)
DECLARE @column_name nvarchar(100)
DECLARE @tableDate datetime
DECLARE @LastActivityDate datetime
SET @column_name='%DATE' --only ends in date, so as not to pick up 'update_office',etc
if @SSN IS NULL OR @SSN = '' OR @SSN = ' '
begin
BREAK
end
else
begin
WHILE select Table_Name,Field1 from dbo.MERGE_TABLES where [Enabled]='Y' AND Field1=@SSN
BEGIN
SET @table = Table_Name
SET @tableSSN = Field1
declare @column_name nvarchar(100)
set @table = 'e_client'
set @column_name='%DATE' --only ends in date, so as not to pick up 'update_office',etc
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=@table AND column_name LIKE @column_name ORDER BY ordinal_position
IF ISDATE(SELECT .... FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=@table AND column_name LIKE @column_name)=1
begin
CONVERT(datetime,(SELECT .... FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=@table AND column_name LIKE @column_name))
end
.
.
.
IF (Select MAX([@tableDate]) from @table where @tableSSN=@SSN) > @LastActivityDate --column like FinishDate, proposedFinishDate or startdate if finish is empty
begin
@LastActivityDate=@tableDate
end
END
end--@SSN
SET @Result=@LastActivityDate
RETURN @Result
END
GO
- 你有一个未记录的数据库
- 你不知道列名
- 您不知道哪些列包含日期
- 使用至少三种不同的数据类型存储日期
- 您不知道哪些列包含SSAN
- 列的名称不一致
CREATE DOMAIN
语句,如(PostgreSQL)
- 你有一个未记录的数据库
- 你不知道列名
- 您不知道哪些列包含日期
- 使用至少三种不同的数据类型存储日期
- 您不知道哪些列包含SSAN
- 列的名称不一致
CREATE DOMAIN
语句,如(PostgreSQL)
CREATE DOMAIN SSAN AS CHAR(9) CHECK (VALUE ~ '^\\d{9}$');
CREATE TABLE users (
user_id INTEGER PRIMARY KEY,
ssan SSAN NOT NULL UNIQUE, -- These *are* unique where I work. YMMV.
...
);