【问题标题】:Creating SQL Function to Create Multiple Tables创建 SQL 函数以创建多个表
【发布时间】:2018-04-19 14:54:03
【问题描述】:

我目前正在将 SAS 流程转移到 SQL。在 SAS 流程中,我利用宏来创建大量表。

我试图利用 SQL 中的 CREATE FUNCTION 函数来模拟这个过程,但是我被卡住了。我有三个参数,服务器名称、新表的名称和应该从中选择的表。我不确定我应该指定什么作为我要返回的内容,因为我不想返回任何东西,只是创建表。

CREATE FUNCTION dbo.functionname (@server VARCHAR(250), @name VARCHAR(250), @table VARCHAR(250))
RETURN (???)
AS BEGIN
SELECT *
INTO @server.dbo.@nm
FROM @table
RETURN
END

这是我到目前为止所想出的。我的 SELECT 语句实际上不会是 *,我只是为了这个问题简单起见。

更新:在这种情况下,由于权限受到限制,因此不能选择使用存储过程。

【问题讨论】:

  • 听起来你想要一个过程,而不是一个函数。详情here.
  • 您需要为此使用存储过程。此外,由于您是从表创建表,因此您应该使用 SELECT INTO 来创建表。
  • 提示:将对象名称组装成动态 SQL 语句时的最佳做法是使用 QuoteName() 以避免出现奇怪名称的问题,例如New Table 带有空格或保留字,例如 From
  • 我已经更新了我的问题,以澄清我需要在不使用存储过程的情况下找到解决方案,因为尚未授予使用它们的权限。

标签: sql tsql sql-server-2014


【解决方案1】:

您可以按如下方式创建动态 SQL 脚本

declare @newtable sysname = 'T003', 
        @sourcetable sysname = 'sys.tables'

declare @sql nvarchar(max)
set @sql = N'select * into ' + @newtable + ' from ' + @sourcetable + ';'
set @sql = @sql + N'select * from ' + @newtable 
exec sp_executesql @sql

然后你可以在存储过程中使用它 要从新表返回数据,必须事先知道表类型。在这种情况下是不可能的,因此开发人员无法创建函数返回类型 或者创建一个函数来创建表并将数据插入其中。但返回失败或成功等 然后再次使用动态 SQL 从新表中选择

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多