Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 执行存储为字段值的SQL语句_Sql Server_Tsql - Fatal编程技术网

Sql server 执行存储为字段值的SQL语句

Sql server 执行存储为字段值的SQL语句,sql-server,tsql,Sql Server,Tsql,是否可以执行已作为文本存储在表中的SQL语句 我试图创建一个配置表来驱动大量SSRS订阅,不想将任何值直接编码到报告中,我希望它们都从表中驱动以进行维护 例如 如果一个报告的一部分文件名将始终是上个月的年份(例如2013年),但这需要在运行时生成 我可以将其存储为文本字段吗 CAST(YEAR(DATEADD(month, -1, GETDATE())) AS VARCHAR(4)) 然后执行它并将结果解析为SQL查询?如果我正确理解了您的问题,那么可以使用动态SQL。例如: DECLARE

是否可以执行已作为文本存储在表中的SQL语句

我试图创建一个配置表来驱动大量SSRS订阅,不想将任何值直接编码到报告中,我希望它们都从表中驱动以进行维护

例如

如果一个报告的一部分文件名将始终是上个月的年份(例如2013年),但这需要在运行时生成

我可以将其存储为文本字段吗

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终于到了那里。缺少括号和长时间盯着它看太久的组合!他最终到达了那里。非常感谢!