将字符串发送到函数并使用字符串作为“表”

时间:2013-11-27 10:22:01

标签: sql sql-server function table-functions

有没有办法将字符串发送到T-SQL函数并将该字符串用作“表”

例如

CREATE FUNCTION [dbo].[TEST] ( @id int, **@table_name** nvarchar(50))
RETURNS @mytables TABLE
   (
    id     int,
    values nvarchar(50)
   )
AS
BEGIN
   INSERT @mytables
      SELECT id, values FROM **@table_name**
   RETURN
END  

1 个答案:

答案 0 :(得分:1)

您不能在函数中使用动态SQL,也不能在用户定义的函数中的任何表中插入,更新或删除(请查看Marc给出的link ),根据您的要求,SP是这样的最佳解决方案:

CREATE PROCEDURE [dbo].[TEST] (@id int, @table_name nvarchar(50))
AS
BEGIN
    declare @strSQL NVARCHAR(MAX)

    set @strSQL = ' SELECT ' + cast(@id as varchar(20)) + ', Name from ' + @table_name
    exec(@strSQL)
END

并按

运行该SP
EXEC [TEST] @id=5, @table_name='tablename'