ExecuteSQL()需要兩個參數,這兩個參數都需要是字符串。您的第二個字符串沒有開頭'
...
試試這個,將缺失的'
添加回來? (注:我沒有檢查什麼對你的查詢)
SELECT
IsNull(
ExecuteSql(
'Numeric',
'SELECT 1 FROM sys.tables a
INNER JOIN sys.indexes b ON a.object_id = b.object_id
WHERE b.is_primary_key = 1
AND a.name = @@ObjectName
AND a.schema_id = SCHEMA_ID (@@SchemaName)'
)
, 0
)
在信中的條款等,他們是標準的SQL語法...
短語sys.tables a
意味着您正在使用表sys.tables
,但從現在開始將它別名爲a
。這就是爲什麼你稍後看到a.name
。
同樣適用於sys.indexes b
,爲表sys.indexes
創建別名b
。
我會認爲這種形式的壞習慣。這與其他語言中的變量a
和b
一樣。在我看來,最好有別名/變量名稱表示。但是,這是服務器來縮短代碼。
對於@@
部分是系統變量在MSDN博客here解釋。
@@ObjectName - corresponds to the name field in sys.objects.
The variable will be replaced with the name of the current object.
@@SchemaName - corresponds to the name field in sys.schemas.
The variable will be replaced with the schema for the current
object if the current object belongs to a schema.
的的ExecuteSQL()函數然後執行在所述第二參數的代碼中,但只在該第一列的第一個值,並將其作爲在的ExecuteSQL(的類型)的第一個參數。由於它總是返回一個值,它可能會返回NULL。 ISNULL(ExecuteSQL(), 0)
用0代替任何NULL返回值。
這看起來沒有道理,您是否閱讀過MSN上的`IsNull`。您需要`ISNULL(Column,Value)`IsNull檢查列或聚合是否爲null或返回null,而不是整個`EXECUTESQL`表達式。 – JonH 2011-12-16 15:30:02