2011-03-23 28 views
1

嘿那里,基本上试图让[Field ID]保存到@fieldID,所以我可以在SP的另一点使用它。尝试过各种组合,但我大部分都会遇到'将转换varchar值...转换为数据类型int时转换失败的错误。 [字段ID]是一个int和主键。我甚至尝试投射[场ID]只是为了确保它仍然失败。动态sql - 试图保存值

Declare @fieldID as int 
Declare @sql1 as varchar(1000) 
set @sql1 = 'select '[email protected]+' = [Field ID] from ['[email protected]+'].dbo.[Custom Field Definition] where [Name] = ''Roster Y/N'' and [Table Type] = 0' 
    --print @sql1 
    exec(@sql1) 

如果我删除了“'+ @ fieldID +'”我得到了正确的值。 我知道这是行不通的,但有没有像@fieldID = exec(@sql1)?

感谢您的帮助!
dave k。

回答

3

集@fieldID = EXEC(@ SQL1)

你需要使用sp_executesql的具有输出

这里有一个例子

DECLARE @chvTableName VARCHAR(100), 
@intTableCount INT, 
@chvSQL NVARCHAR(100) 

SELECT @chvTableName = 'Authors' 
SELECT @chvSQL = N'SELECT @intTableCount = COUNT(*) FROM ' + @chvTableName 

EXEC sp_executesql @chvSQL, N'@intTableCount INT OUTPUT', @intTableCount OUTPUT 

SELECT @intTableCount 
GO 

所以,试试这个

DECLARE @DataBaseName VARCHAR(100), 
@fieldID INT, 
@chvSQL NVARCHAR(300) 

SELECT @chvSQL = N'SELECT @fieldID =[Field ID] from ['[email protected]+'].dbo.[Custom Field Definition] where [Name] = ''Roster Y/N'' and [Table Type] = 0' 

EXEC sp_executesql @chvSQL, N'@fieldID INT OUTPUT', @fieldID OUTPUT 

SELECT @fieldID 
GO 
+0

正是我需要的。几乎是一个复制和粘贴解决方案。谢谢! – 2011-03-23 17:13:56

0

简单的答案是转换你fieldId为varchar

Declare @fieldID as int 
Declare @sql1 as varchar(10) 
set @sql1 = 'select '+ Convert(varchar(100),@fieldID) 
exec(@sql1) 

但作为SQLMenace表明,使用sp_executesql的