【问题标题】:Print selected values打印选定的值
【发布时间】:2021-09-27 20:07:09
【问题描述】:

如果有多个表,我想从这些表中找出col2为null时col1的值,并通过存储过程打印出来。

col1 col2
a A
b null
b B
c C
a null

预期输出: a,b

--what I did but can not work

create proc sp_getValue
@tableName varchar(30)
as
declare @result nvarchar(max)
select distinct col1=@result from @tableName
print @result

感谢您的帮助。

【问题讨论】:

  • 您想要ab 只是您打印的方式还是表格?无论如何,我建议你使用exec
  • 我想打印它们。我曾尝试将 select 语句写为字符串并执行字符串但无法工作。
  • 要查找行,您需要使用WHERE col2 IS NULL。但是,构造 from @tableName 永远不会起作用:FROM 子句不接受 @parameter 值,表名需要在查询中显式写入,因为编译器会检查表是否存在 + 您从中使用的所有列, 在评估任何参数值之前。请参阅here 了解如何解决此问题。
  • @PeterB 感谢您的帮助。我检查帖子。有帮助!
  • 拥有多个具有相同架构的表通常是设计缺陷

标签: sql sql-server tsql stored-procedures


【解决方案1】:

如果你想获取表名作为参数,你应该使用exec

create proc sp_getValue
 @tableName varchar(30)
as
  exec('select distinct col1 from '+ quotename(@tableName) + ' where col2 is null'); 

要将此表转换为字符串,您可以将结果输出到某个临时表中,并使用游标遍历该表。像这样的:

DECLARE @value  NVARCHAR(30)
DECLARE @result NVARCHAR(100) = '';
CREATE TABLE #temp
(
    col1 NVARCHAR(30)
)

EXEC ('insert into #temp select col1 from ' + @tableName +' where col2 is null')

DECLARE myCur CURSOR FOR SELECT *
                         FROM #temp;
open myCur;
FETCH next from myCur  INTO @value;

WHILE @@FETCH_STATUS = 0
    BEGIN
        set @result = @result + @value + ',';
        FETCH next from myCur INTO @value;
    END

PRINT @result

close myCur;
DEALLOCATE myCur;

【讨论】:

  • 谢谢。如果我想打印输出值,然后将值传输到字符串,每个值后面都有一个逗号,例如:a,b,我该怎么办?
  • 我建议通过光标运行它们。我会编辑答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2018-11-26
  • 2011-05-15
相关资源
最近更新 更多