sql-server - SQL PRINT 在某些实例中不起作用

标签 sql-server t-sql dynamic-sql

在下面的内容中,如果我尝试在 BEGIN 语句之后放置一个打印,它不起作用,当我删除 BEGIN-END 语句中的所有内容并放置一个打印时,它会起作用;

SET @SQL = 'IF (((SELECT fldLT FROM #zArray) = ''p'') OR ((SELECT fldMF FROM #zArray) <> -1))
            BEGIN
                SET @X = '+@Z+' * ((SELECT fldLF FROM #zArray) / 100))

                IF (CAST((SELECT fldMF FROM #zArray) AS FLOAT) > '+@X+')
                    BEGIN
                        SET @X = (CAST((SELECT fldMF FROM #zArray) AS FLOAT))
                    END                         
                END'   

EXEC sp_executesql @SQL, N'@X NVARCHAR(50),@Z NVARCHAR(50)', @X, @Z

以下代码是否有问题导致 print 语句不起作用?

    'SET @X = '+@Z+' * ((SELECT fldLF FROM #zArray) / 100))

                IF (CAST((SELECT fldMF FROM #zArray) AS FLOAT) > '+@X+')
                    BEGIN
                        SET @X = (CAST((SELECT fldMF FROM #zArray) AS FLOAT))
END'

最佳答案

我不明白为什么您要连接参数并在过程 sp_executesql 中再次使用它们。

我稍微修改了您的查询,删除了参数的串联并使用 REPLACE函数,用您的参数替换占位符:

DECLARE @X NVARCHAR(50) = '123'
DECLARE  @Z NVARCHAR(50) = '123'
DECLARE @SQL NVARCHAR(MAX)

SET @SQL = 'IF (((SELECT fldLT FROM #zArray) = ''p'') OR ((SELECT fldMF FROM #zArray) <> -1))
            BEGIN
                SET @paramX = @paramZ * ((SELECT fldLF FROM #zArray) / 100))

                IF (CAST((SELECT fldMF FROM #zArray) AS FLOAT) > @paramX)
                    BEGIN
                        SET @paramX = (CAST((SELECT fldMF FROM #zArray) AS FLOAT))
                    END                         
                END'   

SET @SQL = REPLACE(@SQL,'@paramX',@X)
SET @SQL = REPLACE(@SQL,'@paramZ',@Z)

PRINT @SQL

EXEC sp_executesql @SQL

对我来说,PRINT 语句工作正常。

关于sql-server - SQL PRINT 在某些实例中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837944/

相关文章:

不指定列名的 SQL 合并功能

sql - sys.columns 显示详细信息,但 sys.tables 中缺少表

sql-server - 在使用 insert from select 之前如何检查重复项

sql - 我们认为什么是动态 sql 语句?

sql-server - .值(value)从何而来?

sql - 根据其他记录更新记录

java - 使用 hibernate 进行动态查询

sql-server - 如何通过 PowerShell (Azure CLI) 启用 "Allow Azure services and resources to access this server"?

sql-server - 在 SQL Server 中计算加权平均值

sql-server - 将Access数据库代码更改为T-SQL代码