将查询作为参数发送到SQL函数
我想创建一个SQL表值函数,该函数将通过API接收一个作为n参数的查询。在我的函数中,我希望执行该查询。查询将是SELECT语句 这是我到目前为止所做的和要实现的,但这不是正确的方式将查询作为参数发送到SQL函数,sql,sql-server,Sql,Sql Server,我想创建一个SQL表值函数,该函数将通过API接收一个作为n参数的查询。在我的函数中,我希望执行该查询。查询将是SELECT语句 这是我到目前为止所做的和要实现的,但这不是正确的方式 CREATE FUNCTION CUSTOM_EXPORT_RESULTS ( @query varchar(max), @guid uniqueidentifier, @tableName varchar(200)) RETURNS TABLE AS RETURN ( --
CREATE FUNCTION CUSTOM_EXPORT_RESULTS (
@query varchar(max),
@guid uniqueidentifier,
@tableName varchar(200))
RETURNS TABLE
AS
RETURN
(
-- Execute query into a table
SELECT *
INTO @tableName
FROM (
EXEC(@query)
)
)
GO
请建议正确的方法 试试这个-
CREATE PROCEDURE dbo.sp_CUSTOM_EXPORT_RESULTS
@query NVARCHAR(MAX) = 'SELECT * FROM dbo.test'
, @guid UNIQUEIDENTIFIER
, @tableName VARCHAR(200) = 'test2'
AS BEGIN
SELECT @query =
REPLACE(@query,
'FROM',
'INTO [' + @tableName + '] FROM')
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
IF OBJECT_ID (N''' + @tableName + ''') IS NOT NULL
DROP TABLE [' + @tableName + ']
' + @query
PRINT @SQL
EXEC sys.sp_executesql @SQL
RETURN 0
END
GO
输出-
IF OBJECT_ID (N'test2') IS NOT NULL
DROP TABLE [test2]
SELECT * INTO [test2] FROM dbo.test
您也可以使用存储过程,下面是您可以尝试的代码
CREATE FUNCTION CUSTOM_EXPORT_RESULTS
(
@query varchar(max),
@guid uniqueidentifier,
@tableName varchar(200)
)
RETURNS TABLE
AS
RETURN
(
declare @strQuery nvarchar(max)
-- Execute query into a table
SET @strQuery = REPLACE(@query,'FROM', 'INTO '+@tableName+' FROM')
exec sp_executesql @strQuery
)
GO
我在你的问题中看到的是以下内容的封装:
- 采用动态SQL表达式
- 执行它以填充参数化表
最后,如果您想简单地从一些现有的表(或部分)加载一个新表作为TSQL的一些管理任务的一部分,请考虑发出一个选择…进入这将为您创建一个新的目标表结构(省略索引和约束)并复制数据。SELECT INTO将优于INSERT INTO SELECT,因为
我希望这将使您(和其他人)至少走上一条正确的道路。SQL Server?还是另一个数据库系统?请添加合适的标签。对于SQL Server,您不能从函数内执行特殊SQL。为什么要使用函数进行导出?在我的API中,“将查询执行到表中”是什么意思?我将调用函数,该函数将返回已发送查询的结果。我的函数将返回@tableNameSorry中的数据,但这个答案是错误的。不能从函数中执行特殊SQL。