Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何遍历已知表和未知列以获得每个SSN的最大日期?_Sql_Sql Server 2008 - Fatal编程技术网

Sql 如何遍历已知表和未知列以获得每个SSN的最大日期?

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

我将创建一个函数来读取一个包含大约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
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
  • 列的名称不一致
有些问题迫切需要自动化。我不认为这是其中之一

我不相信一个脚本能在这个数据库中找到它。我认为您应该查看每个表,并通过肉眼确定哪些列包含日期,哪些列包含SSAN。即使一张桌子要花你5分钟,那也不到一天的时间

如果您必须再次这样做,那么您可以根据新发现的表和列知识,将其自动化

如果您在这里工作,您可以使用文本工具查找所有SSAN列,因为它们都基于
CREATE DOMAIN
语句,如(PostgreSQL)

  • 你有一个未记录的数据库
  • 你不知道列名
  • 您不知道哪些列包含日期
  • 使用至少三种不同的数据类型存储日期
  • 您不知道哪些列包含SSAN
  • 列的名称不一致
有些问题迫切需要自动化。我不认为这是其中之一

我不相信一个脚本能在这个数据库中找到它。我认为您应该查看每个表,并通过肉眼确定哪些列包含日期,哪些列包含SSAN。即使一张桌子要花你5分钟,那也不到一天的时间

如果您必须再次这样做,那么您可以根据新发现的表和列知识,将其自动化

如果您在这里工作,您可以使用文本工具查找所有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.
    ...
);