aDABAICAI 2013-12-09 02:50 采纳率: 0%
浏览 887

SqL Serve导出excel,而且可以动态地命名sheetname

excel在同一张excel里导出多张表,而且表名是根据需求来动态改名字的,就是table name 不等同 sheet name,求大神指教.
没有Provider=Microsoft.Jet.OLEDB,因特殊原因不给安装.

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 14:54
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    我提供一个大概思路,你可以根据这个思路自己写代码。但是请注意,这只是一个大致思路,并没有实际的代码。你可能需要修改或添加一些细节。

    首先,你需要创建一个存储过程或者触发器,它会在每次数据更新时自动更改表的名字。然后,你需要在SQL Server中设置触发器的事件类型为"ON UPDATE"。

    1. 创建存储过程:
    CREATE PROCEDURE UpdateTableName 
    AS
    BEGIN
        DECLARE @TableName VARCHAR(256)
        SET @TableName = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME ASC)
    
        IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName AND COLUMN_NAME = 'ID')
        BEGIN
            UPDATE dbo.[YourTableName]
                SET [NewColumnName] = [ColumnValue],
                    [UpdatedDate] = GETDATE()
            WHERE ID IN (SELECT MAX(ID) FROM YourTableName)
            SET @TableName = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME ASC)
        END
    END
    
    1. 在SQL Server中设置触发器:
    CREATE TRIGGER TableName_UpdateTrigger ON TableName
    FOR UPDATE AS
    BEGIN
        CALL UpdateTableName();
    END;
    
    1. 在你的应用程序中使用上述存储过程和触发器:
    Dim connectionString As String = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=mypassword"
    Dim connection As New SqlConnection(connectionString)
    Dim command As New SqlCommand("UpdateTableName", connection)
    
    command.CommandType = CommandType.StoredProcedure
    connection.Open()
    
    Set dataReader = Nothing
    Set dataWriter = Nothing
    
    dataReader = connection.ExecuteReader(command)
    
    If dataReader.HasRows Then
        While dataReader.Read()
            Dim columnName As String = dataReader("ColumnName").ToString
            Dim newColumnName As String = "New" & Right(columnName, Len(columnName) - InStr(columnName, " "))
            Dim updatedColumnValue As String = dataReader("ColumnValue").ToString
            Dim updatedDate As Date = dataReader("UpdatedDate").ToString
            Set command = New SqlCommand("UPDATE [YourTableName] SET [" & newColumnName & "] = @newColumnName, [UpdatedDate] = @updatedDate WHERE ID = @id", connection)
            command.Parameters.AddWithValue("@newColumnName", newColumnName)
            command.Parameters.AddWithValue("@updatedDate", updatedDate)
            command.Parameters.AddWithValue("@id", dataReader("ID").ToString())
            command.ExecuteNonQuery()
        Wend
    End If
    dataReader.Close()
    connection.Close()
    

    注意:这个解决方案是一个基本的示例,实际应用可能会有所不同。例如,你可能需要处理更复杂的条件(例如只对某些列进行更新)或者添加错误处理。

    评论

报告相同问题?