sql-server - 在 sql 查询中替换第一个 FROM

标签 sql-server tsql

我需要在网络应用程序上编写一个查询引擎,需要完成的是用户可以在文本框中输入任何 SELECT 语句,然后将结果创建到一个新表中.

这是我创建的函数,但它只支持 SQL Server 2012,我想要类似于此函数,但只有它应该支持 SQL Server 2005 及更高版本:

CREATE FUNCTION [dbo].[CustomQueryTableCreation]
(
    @TableName varchar(max),
    @sql NVARCHAR(MAX)
)
RETURNS 
  @TableBuilder TABLE
  (
     DS varchar(max)
  )
  BEGIN
  INSERT INTO @TableBuilder
  SELECT 'CREATE TABLE dbo.' + @TableName+'(';

  INSERT INTO @TableBuilder
  SELECT 
   CASE column_ordinal 
     WHEN 1 THEN '' ELSE ',' END 
     + name + ' ' + system_type_name + CASE is_nullable 
     WHEN 0 THEN ' not null' ELSE '' END
  FROM 
  sys.dm_exec_describe_first_result_set
  (
    @sql, NULL, 0
  ) AS f
  ORDER BY
  column_ordinal;

  INSERT INTO @TableBuilder
  SELECT ');';

  RETURN 
END

我现在想做的是搜索我的查询并将 FIRST FROM 替换为 INTO NewTable FROM

查询可以包含多个连接。

我应该用 SQL 还是 C# 来控制它?

最佳答案

我在 2005 环境中遇到了类似的问题。如果将 Select 查询保存到表中,并使用以下内置过程来执行查询:

EXECUTE sp_executesql @Query

这是 MS 文档: http://msdn.microsoft.com/en-us/library/ms188001%28v=sql.90%29.aspx

编辑

牢记这一点,可以获取 SQL 转储并创建 OpenRowset 查询以获取 SQL 并将它们转储到 TempTable 中,并在需要时从临时表转储到永久表。

我创建了以下 SP 来帮助将信息获取到永久表中。 先执行具体SQL语句的程序

CREATE PROCEDURE [dbo].[spExecuteRowset]
(
    @Query NVARCHAR(MAX)
)
AS
BEGIN

--Execute SQL Statement
EXECUTE sp_executesql @Query

END

然后是 OpenRowset SP:

CREATE PROCEDURE [dbo].[spCustomquery]
(
    @ProQuery NVARCHAR(MAX),
    @Tablename NVARCHAR(MAX) 
)
AS 
BEGIN

--Insert the info into a Specidied Table
DECLARE @Query NVARCHAR(max)
SET @Query = 'SELECT * INTO #MyTempTable FROM OPENROWSET(''SQLNCLI'', ''Server=localhost;Trusted_Connection=yes;'','' EXEC [YOUR DATABASE].dbo.spExecuteRowset' +''''+@ProQuery+''''') SELECT * INTO '+ @Tablename +' FROM #MyTempTable'

--FOR DEBUG ONLY!!!!
PRINT @Query

EXEC [YourDatabase].dbo.spExecuteRowset @Query

END

这会将它从#tempTable 带到物理表。

Here 是一些关于 OpenRowset 的文档。

关于sql-server - 在 sql 查询中替换第一个 FROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897406/

相关文章:

sql-server - SSDT 不发布列 COLLATION 更改

sql-server - 将逗号分隔值拆分为行

c# - SQL + Cyrillic 支持 + 参数化查询 + 多项选择

sql - T SQL 格式 SSN/IN (SQL Server 2016+)

sql - t-sql 对连续分区或运行进行编号(字段中具有相同值的序列)

sql-server - 索引超出范围 : JDBC SqlServer exception

sql-server - 在 SQL Server 上监控什么

sql - 使用 WHILE 创建虚拟数据

sql-server - 找出导致错误的行

python - 从 Ubuntu+PYODBC 连接到 SQL Server 时出错