sql中怎么写表变量参数?

usun82 2010-11-06 01:31:59
要把表中查询出来的CardID拼接成一个字符串,下面的两个方法怎么改才行,多谢指教!
方法一:

declare @indextable table(id int identity(1,1),nid int)
exec('insert into @indextable(nid) select CardID from (select top 10 ROW_NUMBER() over(order by CardID) no,DeptCode,CurrentLocation,CardID from CardInfo order by CardID)s')
DECLARE @STR VARCHAR(4000)
SELECT @STR = ISNULL(@STR,'')+id+',' FROM @indextable

方法二:

DECLARE @STR VARCHAR(4000)
SELECT @STR = ISNULL(@STR,'')+CardID+',' FROM CardInfo
exec('select CardID,@STR = ISNULL(@STR,'')+CardID+',' from (select top 10 ROW_NUMBER() over(order by CardID) no,DeptCode,CurrentLocation,CardID from CardInfo order by CardID)s')
SELECT @STR
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
usun82 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 abuying 的回复:]
引用 5 楼 usun82 的回复:

引用 3 楼 zsh0809 的回复:
SQL code
DECLARE @INDEXTABLE TABLE(ID INT IDENTITY(1,1),NID INT)
EXEC('INSERT INTO @INDEXTABLE(NID) SELECT CARDID
FROM (SELECT TOP 10 ROW_NUMBER() OVER(OR……
[/Quote]
这个是解决了
消息 245,级别 16,状态 1,第 6 行
在将 varchar 值 ',' 转换成数据类型 int 时失败。
这个错误,上面的那个错误有没有办法呢
abuying 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 usun82 的回复:]

引用 3 楼 zsh0809 的回复:
SQL code
DECLARE @INDEXTABLE TABLE(ID INT IDENTITY(1,1),NID INT)
EXEC('INSERT INTO @INDEXTABLE(NID) SELECT CARDID
FROM (SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY……


这个语句执行时……
[/Quote]
--加ltrim
SELECT @STR = STUFF((SELECT ',' +ISNULL(ltrim(ID),'') FROM @INDEXTABLE FOR XML PATH('')),1,1,'')
usun82 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zsh0809 的回复:]
SQL code
DECLARE @INDEXTABLE TABLE(ID INT IDENTITY(1,1),NID INT)
EXEC('INSERT INTO @INDEXTABLE(NID) SELECT CARDID
FROM (SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY……
[/Quote]

这个语句执行时提示下面的错误信息:
消息 1087,级别 15,状态 2,第 1 行
必须声明表变量 "@INDEXTABLE"。
消息 245,级别 16,状态 1,第 6 行
在将 varchar 值 ',' 转换成数据类型 int 时失败。
「已注销」 2010-11-06
  • 打赏
  • 举报
回复
select CardID  from (select top 10 ROW_NUMBER() over(order by CardID) no,
DeptCode,CurrentLocation,CardID from CardInfo order by CardID)
----看看上面这一段跟下面的结果是不是一样呢
select top 10 CardID from CardInfo order by CardID
「已注销」 2010-11-06
  • 打赏
  • 举报
回复
DECLARE @INDEXTABLE TABLE(ID INT IDENTITY(1,1),NID INT)
EXEC('INSERT INTO @INDEXTABLE(NID) SELECT CARDID
FROM (SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY CARDID) NO,
DEPTCODE,CURRENTLOCATION,CARDID FROM CARDINFO ORDER BY CARDID)S')
DECLARE @STR VARCHAR(4000)
SELECT @STR = STUFF((SELECT ',' +ISNULL(ID,'') FROM @INDEXTABLE FOR XML PATH('')),1,1,'')
usun82 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vidor 的回复:]
SQL code
declare @str varchar(4000)

exec sp_executesql
N'select top 10 @str = isnull(@str+'','','''') + rtrim(CardID) from CardInfo order by CardID',
N'@str varchar(4000) output',
@……
[/Quote]

这个方法测试可以,不知道为什么在存储过程中执行老是超时
Vidor 2010-11-06
  • 打赏
  • 举报
回复
declare @str varchar(4000)

exec sp_executesql
N'select top 10 @str = isnull(@str+'','','''') + rtrim(CardID) from CardInfo order by CardID',
N'@str varchar(4000) output',
@str output

select @str

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧