我在運行此查詢時遇到錯誤,因爲數據類型money無法隱式轉換爲varchar。但是,在嘗試轉換之前,我正在使用if語句來確保數據類型不是金錢。顯然,轉換正在執行。有人知道爲什麼sql服務器條件
表:BBH_NEW西:rebate2
數據類型:錢
if 'money'= 'money'
begin
if (select max([rebate2]) from [BBH_NEW]) = 0
and (select min([rebate2]) from [BBH_NEW]) = 0
print ' rebate2 '
print ' 1 '
end
if 'money'!= 'money'
begin
IF NOT EXISTS (SELECT top 1 * FROM [BBH_NEW] WHERE [rebate2] IS NOT NULL and
len([rebate2]) > 0)
BEGIN
print ' rebate2 '
end
end
錯誤:
消息257,級別16,狀態3,行11
從數據類型的錢爲varchar隱式轉換是不允許的。使用CONVERT函數來運行此查詢。
是此代碼已生成。如果有幫助,這是一個被用來製造它的代碼:
select @temp =
data_type FROM information_schema.columns
WHERE table_schema = 'dbo'
AND table_name = @tblname
AND column_name = @col
SELECT @hold =
'if '''[email protected]+'''= ''money''
begin
if (select max(['[email protected]+']) from ['[email protected]+']) = 0
and (select min(['[email protected]+']) from ['[email protected]+']) = 0
print '' '[email protected]+' money''
end
if '''[email protected]+'''!= ''money''
begin
IF NOT EXISTS (SELECT max([' + @col + ']) FROM ['+ @tblname + ']
WHERE len([' + @col + ']) > 0)
BEGIN
print '' ' + @col + ' ''
end
end'
何時字面上的字符串'錢'不會自己平等? – dnord
此代碼是動態生成的。它通常不是'錢'!='錢',它使用當前列數據類型。即如果'varchar'!='錢'。 我用這個例子是因爲它試圖告訴我,因爲它正在執行下一行,實際上'錢'!='錢' – Colin
所以*提供的*代碼實際上是生成併產生了錯誤?我在SSMS 2008中運行它,它運行時沒有缺陷。 –