首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试取消嵌入SQL语句

问尝试取消嵌入SQL语句
EN

Stack Overflow用户
提问于 2021-10-06 13:39:59
回答 1查看 27关注 0票数 0

下面的查询运行良好,并返回预期的结果

代码语言:javascript
复制
DECLARE @columns NVARCHAR(MAX),
             @sql NVARCHAR(MAX);


SET @columns = N'';


SELECT @columns+=N', p.'+QUOTENAME([Name])
FROM
  (SELECT [Description] AS [Name]
   FROM CNF_PaymentMethod AS p
   WHERE Enabled = 1
     AND PaymentMethodId <> 17
   GROUP BY [Description]) AS x;

SET @sql = N'
SELECT [TransactionId], '+STUFF(@columns, 1, 2, '')+' FROM (
SELECT [TransactionId], [PaymentAmount] AS [Value],  [Description] as [Name] 
    FROM [CNF_PaymentMethod]
    join [DATA_Payment]
    on [CNF_PaymentMethod].[PaymentMethodId] = [DATA_Payment].[PaymentMethodId]
    ) AS j PIVOT (SUM(Value) FOR [Name] in 
      
      ('+(STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, ''))+')) AS p;';

EXEC sp_executesql @sql

我想取消嵌入SET @sql语句,这样我就可以在没有嵌入的情况下运行它,但是我似乎不能得到正确的格式。

代码语言:javascript
复制
('+(STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, ''))+')) AS p;';

我以预期的'.‘、ID或QUOTED_ID错误结束

EN

回答 1

Stack Overflow用户

发布于 2021-10-06 13:43:31

这就是所谓的动态SQL语句。SET @sql...的目的是基于一组变量动态生成SQL语句。在这种情况下,变量位是SET之上的SELECT的结果。如果将EXEC sp_executesql @sql更改为PRINT @sql,您将看到生成的语句。

请注意,每次基于CNF_PaymentMethod中的值运行此脚本时,SQL语句可能会有所不同。您可以从生成的PRINT将输出的SQL语句创建一个视图,但这只是一个一次性快照。在此基础上创建一个视图真的没有多大价值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69466865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档