2011-03-23 36 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的