动态sql - 试图节省价值

时间:2011-03-23 16:24:52

标签: sql-server-2008 dynamic-sql

嘿那里,基本上试图将[Field ID]保存到@fieldID中,这样我就可以在SP中的另一个点使用它了。尝试了各种组合,但我主要得到的错误是'转换varchar值时转换失败...到数据类型int。 [字段ID]是int和主键。我甚至尝试过铸造[field id]只是为了确保它仍然失败。

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

如果我删除“'+ @ fieldID +'”,我会得到正确的值。 我知道这不起作用,但有没有像设置@fieldID = exec(@ sql1)?

感谢您的帮助! 戴夫k。

2 个答案:

答案 0 :(得分:3)

  

设置@fieldID = exec(@ sql1)

您需要将SP_EXECUTESQL与OUTPUT

一起使用

这是一个例子

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 ['+@DataBaseName+'].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

答案 1 :(得分:0)

简单的回答是将fieldId转换为varchar

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

但正如SQLMenace建议的那样,使用SP_ExecuteSQL