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。
答案 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