【发布时间】: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