Sql server 执行存储为字段值的SQL语句
是否可以执行已作为文本存储在表中的SQL语句 我试图创建一个配置表来驱动大量SSRS订阅,不想将任何值直接编码到报告中,我希望它们都从表中驱动以进行维护 例如 如果一个报告的一部分文件名将始终是上个月的年份(例如2013年),但这需要在运行时生成 我可以将其存储为文本字段吗Sql server 执行存储为字段值的SQL语句,sql-server,tsql,Sql Server,Tsql,是否可以执行已作为文本存储在表中的SQL语句 我试图创建一个配置表来驱动大量SSRS订阅,不想将任何值直接编码到报告中,我希望它们都从表中驱动以进行维护 例如 如果一个报告的一部分文件名将始终是上个月的年份(例如2013年),但这需要在运行时生成 我可以将其存储为文本字段吗 CAST(YEAR(DATEADD(month, -1, GETDATE())) AS VARCHAR(4)) 然后执行它并将结果解析为SQL查询?如果我正确理解了您的问题,那么可以使用动态SQL。例如: DECLARE
CAST(YEAR(DATEADD(month, -1, GETDATE())) AS VARCHAR(4))
然后执行它并将结果解析为SQL查询?如果我正确理解了您的问题,那么可以使用动态SQL。例如:
DECLARE @SQL NVARCHAR(4000)
DECLARE @YEAR VARCHAR(4)
SET @SQL = 'SELECT @yr = CAST(YEAR(DATEADD(month, -1, GETDATE())) AS VARCHAR(4))'
EXECUTE sp_executesql @SQL, N'@yr VARCHAR(4) OUTPUT', @yr=@YEAR OUTPUT
SELECT @YEAR
…将2013年返回到变量@年
这里我已经对查询进行了硬编码,但是从表的列值构建@SQL值是一个简单的例子。然后可以使用此查询的结果构建另一个动态查询,依此类推
下面是上面的一个子集,显示从表中获取的SQL:
CREATE TABLE Dynamic (id INTEGER, text VARCHAR(4000) )
INSERT Dynamic values (1, 'CAST(YEAR(DATEADD(month, -1, GETDATE())) AS VARCHAR(4))')
SET @SQL = 'SELECT @yr = ' + (SELECT text FROM Dynamic WHERE id = 1)
你为什么不能
每个报告是否只有一行值
我看到两个选择与SSR
1) sql中的所有内容都是动态sql
declare @sql nvarchar(4000)
select @sql = 'select * from mytable where year = ' mavar'
from tablevalue where uniqueid = blablabla
exec sp_executesql @sql
第二种可能性:
在SSRS中创建第一个数据集,获取该值,然后评估条件值并将其发送到第三个数据集
如果您有多个值,您仍然可以想象从第一个数据集获取值,对它们进行评估并将其发送到子报表
我不知道你的应用程序是否有足够的能力来决定这个的性能
在您使用SSRS之前,我建议您尝试使用SSRS而不是Sql来找到解决方案(但这根本不是黄金法则!!!)很抱歉,您很难获得正确的语法来从tables列值构建@Sql。你能帮忙吗?@DavidA请看我的编辑。希望它能如此简单?99%有没有一种方法可以传递参数来指定ID值?您可以使用变量,例如DECLARE&ID INT,SET&ID=1,…WHERE ID=&ID)。您可以从另一个表中获取该变量的值,或者将其作为输入参数(如果这是一个存储过程)?(注意,我使用了“&”而不是上面正确的“at”符号,因为“at”符号在注释中有特殊的含义)。Phew终于到了那里。缺少括号和长时间盯着它看太久的组合!他最终到达了那里。非常感谢!