Sql server 将客户端文件插入服务器数据库的列中

Sql server 将客户端文件插入服务器数据库的列中,sql-server,insert,Sql Server,Insert,我希望编写一个查询,将驻留在客户端C web服务器上的文件插入数据库服务器SQLServer中的列中,类似于INSERT…SELECT*FROM OPENROWSETBULK…,但不必先将文件保存在服务器上 这在SQL中可能吗?在某个时候,服务器必须控制文件。这并不意味着服务器必须保留文件,但文件必须到达服务器才能读取并插入到数据库中。通常,这是通过表单和文件类型输入实现的。在服务器上,您可以使用上载的文件创建查询,然后将其删除 也就是说,在数据库中存储文件是一种有争议的做法。根据要存储的文件的

我希望编写一个查询,将驻留在客户端C web服务器上的文件插入数据库服务器SQLServer中的列中,类似于INSERT…SELECT*FROM OPENROWSETBULK…,但不必先将文件保存在服务器上


这在SQL中可能吗?

在某个时候,服务器必须控制文件。这并不意味着服务器必须保留文件,但文件必须到达服务器才能读取并插入到数据库中。通常,这是通过表单和文件类型输入实现的。在服务器上,您可以使用上载的文件创建查询,然后将其删除


也就是说,在数据库中存储文件是一种有争议的做法。根据要存储的文件的类型和大小,数据库的大小可以快速膨胀。对于初学者来说,这使得备份速度变慢,更容易失败,同时还有一大堆其他潜在的陷阱。请查看以下问题:正如您从答案中看到的,需要考虑很多因素,但一个好的经验法则是,除非您有令人信服的理由这样做,否则不要这样做。

尽管您的上下文未说明,但我假设您打算从SSMS而不是从OSQL(脚本)运行此操作,或者通过其他方式

该文件不需要驻留在运行SQLServer的物理框中,但SQLServer需要访问它。我认为,典型的方法是应用服务器将文件复制到共享存储库,然后通过引用将其传递给SQLServer。这样做的语法相对简单,可以在中找到

相反,如果您想为SQL Server提供一种机制,以便从某种类型的流操作中保存文件,在这种类型的流操作中,客户端直接传输文件,并且没有共享存储库,那么我不知道有什么方法可以做到这一点。即使使用SQL FILESTREAM对象,您仍然需要一个可访问的NTFS位置来进行数据流传输。参见。

在中,穆罕默德·埃尔斯海米解释了如何做到这一点:

using(SqlConnection con = new SqlConnection(conStr) )
using(SqlCommand command = new SqlCommand("INSERT INTO MyFiles VALUES (@Filename, @Data)", con) )
{
    command.Parameters.AddWithValue("@Filename", Path.GetFileName(filename));
    command.Parameters.AddWithValue("@Data", File.ReadAllBytes(filename));
    connection.Open();
}

基本上,通过这种方式,文件在客户端读取并发送到数据库服务器,而不需要服务器上的临时文件。

问题通常包括查询、疑问和/或问号。如前所述,对你的问题的准确回答可能是简洁的,祝你玩得开心!谢谢,编辑过,现在好点了吗?是的,这是可能的,但是实现可能会因客户端软件而异。例如,这可能会有所不同,具体取决于您使用的是SSI还是Web应用程序。另外,专栏的数据类型是什么,例如BLOB、NTEXT、FileStream?客户端是C Web App,专栏的数据类型是我选择的任何一种可以工作的数据类型:请详细说明这是如何可能的?+1我还删除了以前的评论。他们只是在这一点上增加了噪音,但这一点也一样