sql - 如何为此编写动态 SQL?

标签 sql sql-server sql-server-2008 stored-procedures dynamic-sql

我需要编写一个只有执行语句的过程。

示例:

Create Procedure dbo.allSPExecute( @id int)
as
begin

EXEC dbo.tic @day= 7,@name = 'Gname',@Type = 'Utype'
EXEC dbo.tic @day= 7,@name = 'tname',@Type = 'Utype'
EXEC dbo.gtype @day = 7,@Tname = 'UName_By',@Udept = 'Dept'

End

我有超过 50 个这样的语句。我有一个查找表:

ID  Name        SCol      Dcol       IOrd
1   dbo.tic     Gname     @name       1
1   dbo.tic     tname     @name       2
1   dbo.tic     Utype     @Type       1
1   dbo.tic     Utype     @Type       2
2   dbo.gtype   UName_By  @Tname      1
2   dbo.gtype   Dept      @Udept      1

有没有一种方法,如果我传递 ID,那么它将从查找表中获取值并执行该过程。有人可以帮忙吗?

编辑:更改了查找表中的数据并创建过程

最佳答案

最简单的解决方案 - 让你的存储过程像这样:

Create Procedure dbo.allSPExecute( @id int)
as

DECLARE @SQL varchar(max)

SET @SQL = 'USE MyDB'

SELECT @SQL = @SQL +
'EXEC ' + t.Name + ' @day = 7,' + t.Dcol + ' = ''' + t.Scol + ''
FROM MyTable t
WHERE t.id = @ID

EXEC (@SQL)

关于sql - 如何为此编写动态 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157096/

相关文章:

SQL Server - 根据 ID 和计算机名查找以前的记录

c# - asp.net LinqDataSource 使用 join 查询多个表

SQL查询选择帮助需要

sql-server-2008 - sql server 如何对你的数据进行排序?

MySQL 仅当列中的行重复时才选择条件

sql - % 在 like 子句的开头

c# - linq 中等效的 SQL 限制

sql - 用户定义函数最佳实践

sql - 就位逗号分隔值的聚合

sql - 多条记录的 SCOPE_IDENTITY